繁体   English   中英

仅当文件存在时才使用 fstream 读取/写入文件

[英]Read/write file only if it exists using fstream

我正在使用 fstream 处理一个文件,我需要读取和写入它。 但是,即使使用 std::ios:in,如果文件不存在,它也会继续创建:

std::fstream file("myfile.txt", std::ios::in | std::ios::out | std::ios::app);

有什么想法吗?

提前致谢!

有不同的方法,你可以用旧的方法来做

std::fstream file("myfile.txt", std::ios::in | std::ios::out); // edited after comment
if (!file)
{
    // Can't open file for some reason
}

或者您可以使用 C++17 中引入的标准库std::filesystem::exists 阅读更多相关信息

if (std::filesystem::exists("myfile.txt")) { // Exists }

请记住,文件可以存在,但您可能无法与它交互(从读取/写入/向它写入)。

如果需要的话:

g++ -std=c++17 yourFile.cpp -o output_executable_name

仔细阅读文档:

std::basic_filebuf<CharT,Traits>::open - cppreference.com

该文件的打开方式如同通过调用std::fopen并使用第二个参数 ( mode ) 确定,如下所示:

模式 openmode & ~ate 文件已存在时的操作 文件不存在时的动作
“r” 从头开始阅读 打不开
“w” 出,出|截断 销毁内容 创建新的
“一种” 应用程序,输出|应用程序 附加到文件 创建新的
“r+” 出|入 从头开始阅读 错误
“w+” 出|入|截断 销毁内容 创建新的
“一个+” 出|进|应用,进|应用 写到最后 创建新的
“rb” 二进制|输入 从头开始阅读 打不开
“wb” 二进制|输出,二进制|输出|截断 销毁内容 创建新的
“ab” 二进制|应用程序,二进制|输出|应用程序 写到最后 创建新的
“R+B” 二进制|输出|输入 从头开始阅读 错误
“w+b” 二进制|输出|输入|截断 销毁内容 创建新的
“a+b” 二进制|输出|输入|应用,二进制|输入|应用 写到最后 创建新的

这应该可以解释一切。

只需放下app标志即可完成。

https://wandbox.org/permlink/p4vLC8ane9Ndh1gN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM