Ios trunc c что это
There may be times when you want to modify the way a file is opened or used in a program. For example, in some cases it is desirable that writes append to the end of a file rather than overwriting the existing values. The file stream constructor takes a second argument, the open mode , that allows such variations to be specified. Here is an example that creates a file stream object Str , connects it to the external file named «inout.txt» , and opens it for reading and for writing at the end of the file:
Note that if the «inout.txt» file doesn’t exist it will be created.
30.3.1 The Open Mode Flags
The open mode argument is of type std::ios_base::openmode , which is a bitmask type like the format flags and the stream state. Table 32 defines the following bits:
Flag Names | Effects | |||||||||||||||||||||||||||||
Open Mode | C stdio Equivalent | Effect | |||||||||||||||||||||||||
Mode | Meaning | For | Description |
---|---|---|---|
app | append | Output | Appends data at the end of the file. |
binary | binary | Input/Output | Input and output is done in binary. |
in | input | Input | Opens the file for reading. |
out | output | Output | Opens the file for writing. |
trunc | truncate | Input/Output | Removes contents of the file when opening. |
ate | at end | Input | Goes to the end of the file when opening. |
Note: Setting the binary mode lets the data be read/written exactly as-is; not setting it enables the translation of the newline ‘\n’ character to/from a platform specific end of line sequence.
For example on Windows the end of line sequence is CRLF ( "\r\n" ).
Write: "\n" => "\r\n"
Read: "\r\n" => "\n"
What is the difference among ios::app, out, and trunc in c++?
I know that the default file open mode is out. And I think out will overwrite the data in the file, but in the following code, it age data doesn’t overwrite name data.
Then I’m confused about the three open mode for file – app, out, trunc.
If for name I enter “Zara” and age “9”, the output should be “9ara”. However, it is not. It is “Zara 9”.
2 Answers 2
ios::out is the default mode for std::ofstream , it means that output operations can be used (i.e. you can write to the file).
ios::app (short for append) means that instead of overwriting the file from the beginning, all output operations are done at the end of the file. This is only meaningful if the file is also open for output.
ios::trunc (short for truncate) means that when the file is opened, the old contents are immediately removed. Again, this is only meaningful if the file is also open for output.
Your code just uses the default ios::out mode. So it starts writing from the beginning of the file, but doesn’t remove the old contents. So the new contents will overlay what’s already there — if the file is originally 10 bytes long, and you write 3 bytes, the result will be the 3 bytes you write followed by the remaining 7 bytes of the original contents. More concretely, if the file originally contains:
and you write FN LN and then 20 (with newlines after each), the resulting file will look like:
because you only overwrite the first 9 bytes of the file (assuming Unix-style newlines).
C++. Файловая система C++. Общие принципы работы. Примеры. Открытие/закрытие файла
Файловая система C++. Общие принципы работы. Примеры. Открытие/закрытие файла
Содержание
- 1. Подключение доступа к классам организации работы с файловой системой C++
- 2. Создание файлового потока. Каким образом осуществляется связь потока с файлом? Функция open()
- 3. Способы открытия файла. Функция openmode()
- 4. Функция is_open() . Проверка открытия файла. Пример
- 5. Функция close() . Закрытие файла. Пример
- 6. Примеры открытия/закрытия файла функцией open() . Проверка открытия файла функцией is_open()
Поиск на других ресурсах:
1. Подключение доступа к классам организации работы с файловой системой C++
Файловый ввод/вывод есть частью общей системы ввода/вывода языка C++. Для того, чтобы в программе можно было использовать файловый ввод/вывод предварительно должен быть подключен модуль fstream
В этом модуле реализованы основные классы для работы с файловой системой:
- ifstream – используется для организации ввода из файлового потока;
- ofstream – используется для организации вывода в файл (файловый поток);
- fstream – используется для обеспечения ввода/вывода.
2. Создание файлового потока. Каким образом осуществляется связь потока с файлом? Функция open()
Чтобы создать файловый поток нужно объявить экземпляр одного из классов ifstream , ofstream или fstream
Созданный поток связывается с файлом с помощью функции open() , которая имеет различные реализации в разных классах.
В классе ifstream функция open() имеет следующий прототип
- filename – имя открываемого файла. Имя может быть полным или сокращенным, например, «myfile.txt» ;
- mode – способ открытия файла. Этот параметр принимает значение ios::in , которое описывается в функции openmode() . Значение ios::in означает, что файл открывается только для ввода.
В классе ofstream функция open() имеет следующий прототип
- filename – имя открываемого файла;
- mode – параметр, который задает способ открытия файла. В этом параметре значение ios::out означает, что файл открывается для вывода. Значение ios::trunc означает, что предшествующее содержимое существующего файла с таким самым именем будет удалено, а длина файла станет равной нулю.
В классе fstream прототип функции open() следующий
- filename – имя файла;
- mode – параметр, который задает способ открытия файла. Как видно из значения параметра mode , файл открывается и для записи и для чтения.
3. Способы открытия файла. Функция openmode()
Способы открытия файла могут быть разными. Значения, которые описывают способы открытия файла, реализованы в функции openmode() . Ниже приведены значения, которые могут возвращаться функцией openmode() и объяснение к ним:
- ios::app – записываемые данные дописываются в конец файла;
- ios::ate – при открытии файла происходит поиск конца файла. Но запись в файл может осуществляться в любое место этого файла;
- ios::binary – позволяет открыть файл в бинарном (двоичном) режиме. Существует два режима открытия файла: текстовый и бинарный. По умолчанию файлы открываются в текстовом режиме;
- ios::in – файл открывается для ввода (происходит чтение из файла);
- ios::out – файл открывается для вывода (происходит запись в файл);
- ios::trunc – означает, что предыдущее содержимое существующего файла с таким самым именем будет удалено, а длина файла станет равной нулю. Если открыть поток вывода с помощью класса ofstream все содержимое файла с тем же именем стирается.
Способы открытия файла можно комбинировать между собою с помощью операции | (побитовое ИЛИ).
Пример. Способы открытия файла.
4. Функция is_open() . Проверка открытия файла. Пример
Функция is_open() предназначена для проверки, закрыт ли файл или нет. Эта функция реализована в классах ifstream , ofstream и fstream .
Функция имеет следующий прототип:
Функция возвращает true , если поток связан с открытым файлом. В другом случае функция возвращает false .
Пример. Демонстрируется определение открытия файла для объекта os класса ofstream . Если файл открыт, то этот файл закрывается.
5. Функция close() . Закрытие файла. Пример
Чтобы закрыть файл, нужно вызвать функцию close() .
Например. Далее продемонстрировано открытие и закрытие файла для потока ifstream
6. Примеры открытия/закрытия файла функцией open() . Проверка открытия файла функцией is_open()
Открыть файл можно одним из двух способов:
- с помощью функции open() ;
- с помощью конструктора класса (см. примеры ниже).
Если файл открыт, то можно реализовывать роботу с этим файлом. Возможна ситуация, что файл не будет открыт после вызова функции f_open() . В этом случае в программе нужно реализовать соответствующую проверку.
Корректность открытия файла можно реализовать одним из двух нижеследующих способов:
- с помощью соответствующей проверки оператором условного перехода if ;
- с помощью функции is_open() .
Пример 1. Открытие файла для вывода (записи).
Пример 2. Открытие файла для ввода (чтения)
Пример 3. Открытие файла для вывода (записи). Использование функции is_open() .
Пример 4. Открытие файла для ввода (чтения). Использование функции is_open() .