[英]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
标志即可完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.