std::fopen
Определён в заголовочном файле <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) |
||||
| Поведение не определено, если mode не является одной из перечисленных выше строк. Некоторые реализации поддерживают дополнительные режимы (например, Windows). | ||||
Возвращаемое значение
В случае успеха возвращает указатель на объект, управляющий открытым файловым потоком, у которого сброшены биты eof и ошибки. Поток полностью буферизуется, если только 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/cpp/io/c/fopen