gpt4 book ai didi

c++ - 我无法在使用 fstream 读取文件后立即写入文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:55 26 4
gpt4 key购买 nike

<分区>

据我了解,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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com