我正在尝试编写一个函数,当调用该函数时,它将在我的文本文件中搜索与参数匹配的内容,然后通过覆盖文件来“更新”它。
这是我当前的功能:
编辑:这是新的更新代码,仍然无法正常工作:/
这是它发送到 UpdateGem 的行:(示例 sTempTxt:“AB:5.55”)
ostringstream stream;
stream << std::setprecision(3) << fEindgem;
string sTempTxt = sVak + ":" + stream.str() + "\n";
UpdateGem(sTempTxt);
void UpdateGem(string text)
{
ifstream f;
f.open("GEM.txt");
string sGEMS[100];
string temp[3];
splitstring(text, ":", temp[0], temp[1]);
bool OverWrite;
int count = 0;
string Delete, line;
while(true)
{
getline(f, sGEMS[count], '\n');
if(f.eof()) break;
splitstring(sGEMS[count], ":", temp[1], temp[2]);
if (temp[0] == temp[1])
{
OverWrite = 1;
Delete = sGEMS[count];
}
count++;
}
// Don't set count to 0, since we need it
// count = 0;
ofstream f2;
f2.open("GEM2.txt"/*,std::ios_base::app*/);
if (OverWrite)
{
f.seekg(0, std::ios::beg);
for (int i = 0; i < count; ++i)
{
if (sGEMS[i] != Delete) f2 << sGEMS[i];
}
}
f.close();
f2.close();
remove("GEM.txt");
rename("GEM2.txt", "GEM.txt");
ofstream file;
file.open("GEM.txt",std::ios_base::app);
file << text;
file.close();
}
它必须替换的行采用 NAME:NUMBER 的形式,其中数字可以不同,因此我使用 splitstring 函数将名称与找到的行的名称进行比较,然后完全擦除该行并“更新”稍后重新添加它。但是,我当前的代码只将更新的行写入文件,而不是旧的......