在给定行号之前将行插入文件

时间:2014-11-25 21:55:33

标签: c++ file-io

我有一个给定文件的行号列表。现在我想在文件中的每一行之前插入一个特定的行。如何使用C ++文件操作。

我知道tellg()会在文件中给出字符的位置,但是如何在该行之前获取该行并进行打印。

2 个答案:

答案 0 :(得分:0)

标准方式是:

  1. 打开一个新文件,
  2. 将原始文件的内容复制到插入点
  3. 将新内容插入步骤1中打开的新文件
  4. 在插入点后复制原始文件的其余内容
  5. 删除原始文件
  6. 使用原始文件的名称重命名在步骤1中打开的文件。
  7. 或者,您可以:

    1. 在目标文件中找到插入点
    2. 记住目标文件中的这一点,
    3. 打开一个临时文件,
    4. 将目标文件的剩余内容复制到临时文件中(即,在插入临时文件后复制目标文件中的所有内容),
    5. 寻找目标文件中的插入点
    6. 将要插入的信息写入目标文件
    7. 将临时文件的内容写入目标文件
    8. 如果您的技术不会自动删除临时文件,则删除临时文件。
    9. 注意:如果您有行号,那么最好从最大行号开始,按照最小行号的方式工作,因为在您开始将新内容插入文件后行号会发生变化。通过从最大值开始并尽量减少工作量,在等待处理的项目后面插入内容意味着它们的行号在整个操作过程中保持有效。

答案 1 :(得分:0)

lineNo是一个包含点之前的点的向量,需要按升序排序。

line =1
while(std::getline(myReadFile, s1)){
                if(line == lineNo[0]-1){
                        opfile<<line<<":"<<s1<<"\n";
                        opfile<<"what ever I want to insert\n";
                        lineNo.erase(lineNo.begin());
                }   
                else{
                        opfile<<line<<":"<<s1<<"\n";
                }   
                line++;
        }   

现在删除旧文件并重命名新文件。