命名空间
变体
操作

std::fopen

来自 cppreference.cn
< cpp‎ | io‎ | c
 
 
 
 
定义于头文件 <cstdio>
std::FILE* fopen( const char* filename, const char* mode );

打开由 filename 指定的文件,并返回与该文件关联的文件流。mode 用于确定文件访问模式。

内容

[编辑] 参数

filename - 与文件流关联的文件名
mode - 确定文件访问模式的空终止字符字符串

[编辑] 文件访问标志

文件访问
mode 字符串
含义 解释 文件操作
已存在
文件操作
不存在
"r" 读取 打开文件以进行读取 从头开始读取 返回 NULL 并设置错误
"w" 写入 创建文件以进行写入 销毁内容 创建新的
"a" 追加 追加到文件 写入到末尾 创建新的
"r+" 扩展读取 打开文件以进行读/写 从头开始读取 返回 NULL 并设置错误
"w+" 扩展写入 创建文件以进行读/写 销毁内容 创建新的
"a+" 扩展追加 打开文件以进行读/写 写入到末尾 创建新的
文件访问模式标志 "b" 可以选择指定以二进制模式打开文件。此标志在 POSIX 系统上无效,但在 Windows 等系统上,它会禁用对 '\n''\x1A' 的特殊处理。
在追加文件访问模式下,数据被写入到文件末尾,而与文件位置指示器的当前位置无关。
文件访问模式标志 "x" 可以选择附加到 "w""w+" 说明符。如果文件已存在,则此标志强制函数失败,而不是覆盖它。 (C++17)
如果模式不是上面列出的字符串之一,则行为是未定义的。某些实现定义了其他支持的模式(例如 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