【问题标题】:How to read then edit file txt in C++如何在 C++ 中读取然后编辑文件 txt
【发布时间】:2013-06-05 23:35:11
【问题描述】:

我知道有人问过这个问题here 但我没有找到我要找的东西。目前我能找到的最佳答案显示了如何向文本文件添加内容。

如何使用 fstream 来读取文本文件中的最后一个数字并读取最后一个字符串?

另外,我怎样才能简单地替换文件中的某一行?例如:

文件将是:

Line 1:NAME

Line 2:4

并且代码会读取第 1 行,并将其分配给一个字符串,然后再更改它, 与第二行相同

【问题讨论】:

  • 文件没有“行”。这是编程语言或库添加的抽象层。文件只不过是一长串字节。任何你想用它做的事情都必须通过读取和写入字节来完成。

标签: c++ fstream


【解决方案1】:

将文件视为存储在磁盘上的向量。如果您想在该文件中插入某些内容,则必须将所有内容移到该文件中,以便为新行腾出空间。同样,找到一行也没有什么魔力,无需逐行遍历文件并为您的平台找到结束行字符。

在大多数代码中,处理此类事情的方式是将整个文件加载到内存中,然后在那里进行修改,然后将整个文件写回。

【讨论】:

  • 我该如何实现这个?我应该从我的 .txt 加载所有信息,然后删除原始文件,然后通过创建一个新文件将更改的信息保存到其中吗?
  • 当您打开一个文件进行写入时,它将覆盖任何具有该名称的现有文件。无需显式删除文件
【解决方案2】:

如果您确切知道每行有多少个字段以及多少行,这将帮助您创建一个 while 循环,将字段分配给向量或数组并相应地提取值。然后按照 Joel 的建议,打开文件写入并用新数据替换内容。

代码:

#include <fstream>
#include <vector>
#include <string.h> //or <string> depending on you IDE, i use Xcode

using namespace std;

int main () {

   vector <string> a;
   vector <string> b;
   string field1;
   string field2;

   ifstream data;

   data.open("data.txt");

    if (data.fail()) {
        cerr << "Error Opening File!" <<endl;
        exit(1);
    }

    while (data >> field1 >> field2) {
    a.push_back(field1);
    b.push_back(field2);
    }

    data.close();

    return 0;
}

这就是你读入的方式,向量a保存field1,向量b保存field2,这意味着下一个索引“1”将保存下一行的值(line2)。

【讨论】:

  • 对不起,我真的是 C++ 新手,有 2 个问题/错误,第一个是“ifstrem”。那是错字吗?我应该包括一些东西来使用它吗?第二个是:在 field1 >> field2 部分,is 表示没有操作符“>>”匹配这些操作数。
  • 打错了,应该是ifstream,定义在标题&lt;fstream&gt;中。
  • 是的,你需要包含库#include
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多