C++ 如何标记现有文件的行?

C++ 如何标记现有文件的行?,c++,file,io,C++,File,Io,假设我有一个包含如下内容的文本文件: 四 得分 及 七 年头 以前 我希望能够标记这些行,以便在程序运行后,文件看起来像: 1.四个 2.得分 3.及 4.7 五年半 6.5年前 我准备了一个解决方案;然而,我发现它很重,而且它有一个问题,即标记一个超过最后一行 std::string file = "set_test - Copy.txt"; std::ifstream in_test{file}; std::vector<std::string>

假设我有一个包含如下内容的文本文件:

得分

年头

以前

我希望能够标记这些行,以便在程序运行后,文件看起来像:

1.四个

2.得分

3.及

4.7

五年半

6.5年前

我准备了一个解决方案;然而,我发现它很重,而且它有一个问题,即标记一个超过最后一行

std::string file = "set_test - Copy.txt";
        std::ifstream in_test{file};
        std::vector<std::string> lines;
        while(in_test) {
            std::string temp;
            getline(in_test, temp);

            lines.push_back(temp);
        }
        in_test.close();

        std::ofstream out_test{file};
        for(unsigned int i = 0; i < lines.size(); ++i) {
            out_test << i+1 << '.' << lines[i] << '\n';
        }
std::string file=“set\u test-Copy.txt”;
std::ifstream in_test{file};
std::矢量线;
while(in_测试){
std::字符串温度;
getline(在线测试,温度);
管线。推回(温度);
}
in_test.close();
std::ofstream out_test{file};
for(无符号整数i=0;iout_test问题的原因是这种结构

while (stream is good)
    read from stream
    do something
因为它会读得太多。(有关说明,请参阅。)
发生的情况是,最后一个
getline
,即实际到达文件末尾的那一个,将失败并将
temp
保留为空。
然后,将该空行添加到行中

“规范”流读取循环结构是

while (attempt to read)
    do something with the result
就你而言

std::string temp;
while (getline(in_test, temp)) {
    lines.push_back(temp);
}
如果写入不同的文件,则不需要存储除最后一行以外的任何内容;您可以立即写入每一行。
如果您想更换原件,以后可以用新的替换旧的。
大概是这样的:

std::ifstream in_test{"set_test - Copy.txt";}
std::ofstream out_test{"set_test - Numbered.txt"};
if (!in_test || !out_test) {
    std::cerr << "There was an error in the opening of the files.\n";
    return;
}

int i = 1;
std::string line;
while (getline(in_test, line) && out_test << i << '.' << line << '\n') {
    i++;
}
std::ifstream in_test{“set_test-Copy.txt”}
std::of stream out_test{“set_test-number.txt”};
如果(!in|u测试| |!out|u测试){
标准:cerr