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) | ||||
| 如果模式不是上述列出的字符串之一,则行为未定义。某些实现定义了额外支持的模式(例如 Windows )。 | ||||
返回值
若成功,返回指向已打开文件流控制对象的指针,同时清除eof和error位。除非 filename 指向交互式设备,否则该流为全缓冲状态。
发生错误时,返回空指针。 POSIX标准要求 在这种情况下设置 errno 。
注释
filename 的格式由实现定义,并不必然指向文件(例如可能是控制台或其他可通过文件系统API访问的设备)。在支持路径的平台上, filename 可包含绝对或相对的文件系统路径。
关于可移植目录和文件命名,请参阅 C++ filesystem library 或 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; // 注意:需要 int 类型而非 char 类型来处理 EOF while ((c = std::fgetc(fp)) != EOF) // 标准 C I/O 文件读取循环 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
参见
|
关闭文件
(函数) |
|
| td> 将输出流与实际文件同步 | |
|
使用不同名称重新打开现有流
(函数) |
|
|
C documentation
for
fopen
|
|