std::fopen
来自 cppreference.cn
定义于头文件 <cstdio> |
||
std::FILE* fopen( const char* filename, const char* mode ); |
||
打开由 filename 指定的文件,并返回与该文件关联的文件流。mode 用于确定文件访问模式。
目录 |
[edit] 参数
filename | - | 要将文件流关联到的文件名 |
mode | - | 确定文件访问模式的空终止字符串 |
[edit] 文件访问标志
文件访问 模式字符串 |
含义 | 解释 | 文件 已存在时的操作 |
文件 不存在时的操作 |
---|---|---|---|---|
"r" | 读取 | 打开文件进行读取 | 从头开始读取 | 返回 NULL 并设置错误 |
"w" | 写入 | 创建文件进行写入 | 销毁内容 | 创建新文件 |
"a" | 追加 | 追加到文件 | 写入到末尾 | 创建新文件 |
"r+" | 读取扩展 | 打开文件进行读/写 | 从头开始读取 | 返回 NULL 并设置错误 |
"w+" | 写入扩展 | 创建文件进行读/写 | 销毁内容 | 创建新文件 |
"a+" | 追加扩展 | 打开文件进行读/写 | 写入到末尾 | 创建新文件 |
文件访问模式标志 "b" 可以选择性地指定以二进制模式打开文件。此标志在 POSIX 系统上没有影响,但在 Windows 上,它会禁用对 '\n' 和 '\x1A' 的特殊处理。 在追加文件访问模式下,无论文件位置指示器的当前位置如何,数据都将写入文件末尾。 | ||||
文件访问模式标志 "x" 可以选择性地附加到 "w" 或 "w+" 指定符。此标志强制函数在文件存在时失败,而不是覆盖它。(C++17) | ||||
如果模式不是上面列出的字符串之一,则行为未定义。一些实现定义了额外支持的模式(例如 Windows)。 |
[edit] 返回值
如果成功,返回指向控制打开文件流的对象的指针,eof 和 error 位都被清除。除非 filename 指的是交互式设备,否则流是完全缓冲的。
如果出错,返回空指针。POSIX 要求在这种情况下设置 errno。
[edit] 注意
filename 的格式是实现定义的,不一定指代文件(例如,它可能是控制台或通过文件系统 API 可访问的另一个设备)。在支持它们的平台上,filename 可能包含绝对或相对文件系统路径。
有关可移植的目录和文件命名,请参阅 C++ 文件系统库或 boost.filesystem。
[edit] 示例
运行此代码
#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
[edit] 另请参阅
关闭文件 (function) | |
将输出流与实际文件同步 (function) | |
用不同的名称打开一个现有流 (function) | |
C 文档 for fopen
|