使用 fstream 读取文件后,我无法立即写入文件
I can't write to a file right after reading it using fstream
据我了解,fstream允许您写入和读取相同的打开文件。它还有两个"文件指针",一个用于阅读,另一个用于写入。但是如果我先从文件中读取一行,然后尝试写入 - 文件不会改变,即使我之后使用 flush((。
有一种方法可以解决这个问题 - 使用 seekp(( 并将"文件指针"移动到某个地方。但我不明白为什么它会这样工作。还有一些奇怪的细节 - 如果我在编写之前和之后使用 tellp(( 检查文件指针 - 它们实际上改变了它们的位置!也许我误会了什么,我将不胜感激任何帮助
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
fstream file("Output.txt");
string line = "";
getline(file, line);
cout << "Read line: " << line << endl;
cout << "tellg: " << file.tellg() << endl;
cout << "tellp: " << file.tellp() << endl;
cout << "rdstate: " << file.rdstate() << endl;
cout << "------------------------------- " << endl;
file.write("test", 4);
file.flush();
cout << "After writing:nrdstate: " << file.rdstate() << endl;
cout << "tellg: " << file.tellg() << endl;
cout << "tellp: " << file.tellp() << endl;
file.close();
cout << "------------------------------- " << endl;
cout << "After closing:nrdstate: " << file.rdstate() << endl;
}
所以我有一个文件:
a
b
c
d
程序工作后它不会改变。根据 rdstate(( 没有任何错误
程序输出:
Read line: a
tellg: 3
tellp: 3
rdstate: 0
After writing:
rdstate: 0
tellg: 9
tellp: 9
After closing:
rdstate: 0
在我看来
,Visual Studio编译器中的问题(我使用的是2019版本,但@Scheff可以在VS2013中重现这种错误(。
因此,解决方案是在读取后写入之前插入一个file.seekp(file.tellp(((,反之亦然。或者你可以只使用另一个编译器:-(
相关文章:
- 使用fstream对txt文件中的数字进行循环
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 使 std::fstream 写入文件末尾,但从头开始读取
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 如何检查文件是否已存在于 fstream C++中
- 使用 fstream 库并在屏幕上打印的文件有问题?
- Windows std::fstream 修改文件后打开()?
- 如何删除文件中的数字,通过 c++ fstream 的
- 如何使用单个fstream创建、读取和写入文件
- 如何使用fstream从.txt文件C++中取出int值
- fstream库,试图创建一个变量名为(c++)的文件
- 变量 std::fstream 文件具有初始值设定项,但类型不完整 编译错误
- 如何在 c++ 中使用 fstream 读取.txt文件
- 为什么错误"permission denied","id returned 1 exit status"仅在 IM 使用 C++ 中的头文件 fstream 时才出现
- 创建.dat文件 (fstream) c++
- 如何读取特定文件fstream
- 在驱动器c:中按类打开文件fstream类
- 使用库更新文件<fstream>(仅覆盖特定部分)
- 读取和写入同一个文件fstream