【发布时间】:2020-05-12 14:36:51
【问题描述】:
我对使用标准 c++ 库在 Windows 上工作感到有点困惑。
拥有此代码:
std::fstream _fs;
_fs.open('file.txt', std::fstream::in | std::fstream::out | std::ios_base::ate);
和文件.txt:
abcdefg
SUB
作为 'SUB' 十六进制值 0x1A
在open()之后,没有任何write()或者close(),我发现file.txt被修改了。我发现这个调试代码并在 open() 之后停止它。
file.txt 被修改(也修改文件中的日期)没有 SUB 值,我的意思是,file.txt 现在是:
abcdefg
这是正确的吗?还是我在 open() 模式上做错了什么?
希望有人能指出这一点。
谢谢!
【问题讨论】:
-
如何查看文件内容?如果你在没有
std::ios_base::ate标志的情况下运行相同怎么办? -
嗨,我用 UltraEdit 检查了文件,我在那里打开了文件,当文件更改时它会提醒我并询问我是否要重新加载它。我发现如果我删除 std::fstream::out 标志,文件保持不变,删除 std::ios_base::ate 标志也修改了文件。
-
这并没有解决问题,而是养成使用有意义的值初始化对象的习惯,而不是默认初始化它们并立即覆盖默认值。在这种情况下,这意味着将
std::fstream _fs; _fs.open('file.txt', std::fstream::in | std::fstream::out | std::ios_base::ate);更改为std::fstream _fs('file.txt', std::fstream::in | std::fstream::out | std::ios_base::ate);。 -
@PeteBecker 感谢您的提示,我会记住这一点!