gpt4 book ai didi

c++ - 使用 getline 后,无法写入文件

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:12 26 4
gpt4 key购买 nike

我正在构建一个大型文件 I/O 库,目前正在努力解决 getline() 的互操作性和写入文件的问题。我下面的问题很像这个问题,不幸的是仍然没有答案:C++ After I use getline to read from a file I can no longer write to the txt file

一旦我使用了 getline(),我就无法再写入文件。使用 getline() 的读取请求将继续运行,但写入请求将失败。但是,如果我注释掉getline()的用法,写操作就会成功。

我的代码贴在下面。我注意到 failbit 在第一次写入尝试后被激活。但是,我不知道发生这种情况的原因,因为如果我删除 getline() 操作,它就不会激活。

我应该清楚——我可以完美地从现有文件(包含两行)中读取。但是,除非删除 getline() 语句,否则我无法写入该文件。

一如既往地提供任何帮助。

// Includes
#include <fstream>
#include <iostream>
#include <string>

// Namespace
using namespace std;

int main(){
// filestream object
fstream workFile("testdoc.txt"); //fstream uses ios::in | ios::out by default
// note that I have tried including ios::in | ios::out to no avail

// read from file
string grabbedLine;
getline(workFile, grabbedLine);
cout << "Line #1: " << grabbedLine << endl;

// write to file
workFile<< "Here is some output (#1)" << endl;

// read from file
getline(workFile, grabbedLine);
cout << "Line #2: " << grabbedLine << endl;

// write to file
workFile<< "Here is some output (#2)" << endl;

// wait for some input...
getchar();
}

Current console output (as expected from text file):
Line #1: This is line#1
Line #2: This is line#2

最佳答案

根据一些实验,它看起来像 <<运算符期望偏移量位于文件末尾。我无法准确解释,但在您调用 getline() 后,偏移量似乎不在预期位置。 .通过添加以下行,我能够写入文件以工作:

workFile.seekg(ios_base::end);

紧接着写入文件之前。然而,这会将偏移量放在文件的末尾,并且之后无法正确读取第二行。

我认为您想做的是打开两个文件句柄,一个用于读取,一个用于写入:

int main(){
// filestream object
fstream workFileRead("testdoc.txt", ios_base::in);
fstream workFileWrite("testdoc.txt" , ios_base::app | ios_base::out);

// read from file
string grabbedLine;
getline(workFileRead, grabbedLine);
cout << "Line #1: " << grabbedLine << endl;

// write to file
workFileWrite << "Here is some output (#1)" << endl;

// read from file
getline(workFileRead, grabbedLine);
cout << "Line #2: " << grabbedLine << endl;

// write to file
workFileWrite<< "Here is some output (#2)" << endl;

// wait for some input...
getchar();
}

关于c++ - 使用 getline 后,无法写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911548/

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