std::fopen
Defined in header <cstdio> |
||
|---|---|---|
std::FILE* fopen( const char* filename, const char* mode ); |
Открывает файл, указанный по filename и возвращает поток файла, связанный с этим файлом. mode используется для определения режима доступа к файлу.
Параметры
| filename | - | имя файла, к которому нужно связать поток файла |
| mode | - | строка символов с нулевым завершением, определяющая режим доступа к файлу |
Флаги доступа к файлам
| Строка режима доступа к файлу |
Значение | Объяснение | Действие, если файл уже существует |
Действие, если файл не существует |
|---|---|---|---|---|
"r" |
чтение | Открывает файл для чтения | чтение с начала | вернуть NULL и установить ошибку |
"w" |
запись | Создаёт файл для записи | уничтожает содержимое | создать новый |
"a" |
добавление | Добавляет в файл | запись в конец | создать новый |
"r+" |
расширенное чтение | Открывает файл для чтения/записи | чтение с начала | вернуть NULL и установить ошибку |
"w+" |
расширенная запись | Создаёт файл для чтения/записи | уничтожает содержимое | создать новый |
"a+" |
расширенное добавление | Открывает файл для чтения/записи | запись в конец | создать новый |
Флаг режима доступа к файлу "b" может быть необязательно указан для открытия файла в двоичном режиме. Этот флаг не оказывает влияния на POSIX-системы, но на Windows, например, он отключает специальное обращение с '\n' и '\x1A'. При режимах доступа к файлу добавления данные записываются в конец файла независимо от текущей позиции указателя позиции файла. |
||||
Флаг режима доступа к файлу "x" может быть необязательно добавлен к "w" или "w+" спецификаторам. Этот флаг заставляет функцию завершаться неудачно, если файл существует, вместо перезаписи его. (C++17) |
||||
| Поведение не определено, если режим не является одной из вышеперечисленных строк. Некоторые реализации определяют дополнительные поддерживаемые режимы (например, Windows). | ||||
Возвращаемое значение
В случае успеха возвращает указатель на объект, который управляет открытым потоком файла, при этом оба бита eof и error сброшены. Поток полностью буферизован, если filename относится к интерактивному устройству.
При ошибке возвращает нулевой указатель. POSIX требует, чтобы errno был установлен в этом случае.
Примечания
Формат filename определяется реализацией и не обязательно относится к файлу (например, это может быть консоль или другое устройство, доступное через API файловой системы). В платформах, которые их поддерживают, filename может содержать абсолютный или относительный путь к файловой системе.
Для портативного именования каталогов и файлов см. библиотеку C++ файловой системы или boost.filesystem.
Пример
#include <cstdio>
#include <cstdlib>
int main()
{
int is_ok = EXIT_FAILURE;
FILE* fp = std::fopen("/tmp/test.txt", "w+");
if (!fp)
{
std::perror("File opening failed");
return is_ok;
}
int c; // Note: int, not char, required to handle EOF
while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop
std::putchar(c);
if (std::ferror(fp))
std::puts("I/O error when reading");
else if (std::feof(fp))
{
std::puts("End of file reached successfully");
is_ok = EXIT_SUCCESS;
}
std::fclose(fp);
return is_ok;
}Вывод:
End of file reached successfully
См. также
| закрывает файл (функция) |
|
| синхронизирует поток вывода с фактическим файлом (функция) |
|
| открывает существующий поток с другим именем (функция) |
|
C документация для fopen |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/fopen