std::fopen
来自cppreference.com
在标头 <cstdio> 定义
|
||
std::FILE* fopen( const char* filename, const char* mode ); |
||
打开 filename 所指示的文件并返回与该文件关联的流。用 mode 确定文件访问模式。
参数
filename | - | 要关联文件流的文件名 |
mode | - | 确定文件访问模式的空终止字符串 |
文件访问标记
文件访问模式字符串 | 含义 | 解释 | 若文件已存在的行动 | 若文件不存在的行动 |
---|---|---|---|---|
"r" | 读 | 为读取打开文件 | 从起始读取 | 打开失败 |
"w" | 写 | 为写入创建文件 | 销毁内容 | 创建新文件 |
"a" | 追加 | 追加到文件 | 写入到末尾 | 创建新文件 |
"r+" | 扩展读 | 为读取/写入打开文件 | 从起始读取 | 错误 |
"w+" | 扩展写 | 为读取/写入创建文件 | 销毁内容 | 创建新文件 |
"a+" | 扩展追加 | 为读取/写入打开文件 | 写入到末尾 | 创建新文件 |
文件访问模式标志 "b" 能可选地指定以二进制模式打开文件。此标志在 POSIX 系统上无效果,但例如在 Windows 上,它禁用对 '\n' 和 '\x1A' 的特殊处理。 在追加文件访问模式上,写入数据到文件尾,忽略文件位置指示器的当前位置。 | ||||
文件访问模式标志 "x" 能可选地追加到 "w" 或 "w+" 指定符。此标志强制函数在文件存在的情况下失败,而非重写文件。(C++17) | ||||
若模式不是以上字符串之一,则行为未定义。一些实现定义了额外的支持模式(例如 MSVC)。 |
返回值
若成功,则返回指向控制打开的文件流的对象的指针,并清除 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("打开文件失败"); return is_ok; } int c; // 注意:是 int 而非 char,处理 EOF 所必须 while ((c = std::fgetc(fp)) != EOF) // 标准 C I/O 文件读取循环 std::putchar(c); if (std::ferror(fp)) std::puts("读取时发生了 I/O 错误"); else if (std::feof(fp)) { std::puts("成功抵达文件末尾"); is_ok = EXIT_SUCCESS; } std::fclose(fp); return is_ok; }
输出:
成功抵达文件末尾
参阅
关闭文件 (函数) | |
将输出流与实际文件同步 (函数) | |
以不同名称打开既存流 (函数) |