这是一个初学者问题。我试图在文本文件中找到一个字符串,并将其替换回相同的文件。下面的代码可以很好地将文件内容收集到缓冲区中并替换字符串。但是当我尝试将数据保存回同一个文件时,它会充满一些垃圾字符。请让我知道我做错了什么?
#include <iostream>
#include <fstream>
using namespace std;
const char *fileName = "Test.dat";
int main () {
// This is where we'll put the stuff we read from file
char buffer[ 100 ];
ifstream finout(fileName, ios_base::in | ios_base::out | ios_base::binary);
if(!finout.is_open())
{
cout << "Can not open file " << endl;
return(1);
}
while (finout.getline(buffer, sizeof(buffer))
{
string g( buffer );
string search = "am";
string replace = "was";
long j;
if ( (j = g.find(str2)) != string::npos)
{
g.replace(g.find(str2), str2.length(), "str");
finout.write((char *) &g, sizeof(g)); //This won't work
}
cout << g << "\n";
finout.close();
return 0;
}
我的Test.dat文件包含以下信息:
Hello, How are you?
I am fine.
答案 0 :(得分:1)
ios_base::binary
finout.close();
放入阅读循环中,因此它只适用于一行。答案 1 :(得分:0)
您正尝试使用sizeof()
运算符读取字符串的大小。
这不会起作用,因为它是一个关键字,它为您提供了对象或类型的非动态大小。
您应该使用g.size()
来访问字符串大小!
但首先,您可以处理流处理您的错误:
finout << g;
将完成这项工作。
答案 2 :(得分:0)
首先,您要同时读取和写入文件,因此请使用fstream而不是ifstream。 其次,你有一个文本文件,所以不要使用ios_base :: binary 第三个(char *)&amp; g其中g是std :: string不起作用,请改用g.c_str()。 (简单地说 finout&lt;&lt;克;
现在你可以开始考虑实施......