gpt4 book ai didi

C++ - 在不创建新文件的情况下修改文件

转载 作者:行者123 更新时间:2023-11-30 02:33:24 30 4
gpt4 key购买 nike

我正在尝试打开一个文件,并修改其中的一些内容。我的第一个代码看起来像这样,

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(int argc, char** argv) {
int status = 0;

//error if no filename
if(argc == 1) {
cerr << "No file specified. Please specify a filename" << endl;
status = 1;
}

//open a file and modify
for (int i = 1; i < argc; ++i) {
string line = "";
string filename = argv[i];
ifstream infile;

infile.open(filename);
if(infile.fail()) {
status = 1;
cerr << filename << ": No Such File Exist" << endl;
}
else{
while(getline(infile, line)) {
auto index1 = line.find('(');
auto index2 = line.find(')');
cout << index1 << " " << index2 << endl;
auto itor = line.begin();
if(index1 != string::npos) line[index1] = '[';
if(index2 != string::npos) line[index2] = ']';
}
infile.close();
}
}


return status;
}

我知道直接修改是错误的,因为它不会改变文件中的内容。有没有办法可以直接修改文件?(无需创建新文件,并输出 line 到那个文件)

最佳答案

您可以:

  1. 将已修改和未修改的行存储在 std::vector<std::string> 中.
  2. 关闭文件。
  3. 以写入模式打开文件。
  4. 保存行,存放在std::vector<std::string>中到文件
  5. 关闭文件。

最好为每个步骤创建单独的函数。

void readContents(std::string const& filename,
std::vector<std::string>& lines)
{
...
}

void updateContents(std::vector<std::string>& lines)
{
...
}

void WriteContents(std::string const& filename,
std::vector<std::string> const& lines)
{
...
}

然后调用 from main .

int main(int argc, char* argv[])
{
...

string filename = argv[i];
std::vector<std::string> lines;
readContents(filename, lines);
updateContents(lines):
writeContents(filename, lines):
}

关于C++ - 在不创建新文件的情况下修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35541063/

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