在现有文件中的所需行写入数据

时间:2013-11-23 01:05:26

标签: c++ visual-c++

我有一个已有40行数据的文本文件。我想在文件的最后两行之前写入数据。我是c ++的新手。我在网上搜索并找到了很少的功能,比如fseek和seekp,但我没有得到那些功能如何改变线条。你能指点一下吗? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

  1. 使用std::ifstream
  2. 打开您的文件
  3. 将整个文件读入std::vector<std::string>,其中包含文件中每行的条目(您可以使用std::getline()std::vector<std::string>::push_back()方法来实现此目的。
  4. 关闭std::ifstream
  5. 更改要更改的行索引处的向量条目,或者使用std::vector<std::string>::insert()
  6. 将其他条目插入向量
  7. 使用std::ofstream
  8. 打开您的文件
  9. 将向量内容写回文件(只需迭代向量并将每个条目输出到文件中)。
  10. 在这种情况下,您不应该使用seek函数;特别是,如果替换大小动态变化。

答案 1 :(得分:2)

你说的是C ++,所以我认为你的意思是而不是C.为了这个目的,我想到了一个FIFO。

$ cat last_two_lines.c | ./a.out

#include <iostream>
#include <string>
#include <deque>

main ()
{
  std::deque<std::string> fifo;
  while (!std::cin.eof()) {
    std::string buffer;
    std::getline(std::cin, buffer);
    fifo.push_back(buffer);
    if (fifo.size() > 2) {
      std::cout << fifo.front() << "\n";
      fifo.pop_front();
    }
  }
  std::cout << "    // LINE INSERTED" << "\n";
  while (fifo.size() > 0) {
    std::cout << fifo.front() << "\n";
    fifo.pop_front();
  }
  return 0;
    // LINE INSERTED
}