std::fopen

来自cppreference.com
< cpp‎ | io‎ | c
 
 
 
 
在标头 <cstdio> 定义
std::FILE* fopen(constchar* filename, constchar* 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 错误");elseif(std::feof(fp)){std::puts("成功抵达文件末尾"); is_ok =EXIT_SUCCESS;}   std::fclose(fp);return is_ok;}

输出:

成功抵达文件末尾

[编辑]参阅

关闭文件
(函数)[编辑]
将输出流与实际文件同步
(函数)[编辑]
以不同名称打开既存流
(函数)[编辑]
fopen 的 C 文档
close