0

我正在尝试读取文件并将行放入数组中,然后使用文件中的行数和放入行的顺序以相同的顺序读回它。但问题是我不知道数组文件的大小。有什么方法可以临时存储数据并按照我放入的顺序读回?如何?

4

3 回答 3

2

在实践中,您将使用向量,以便可以将从文件中提取的内容添加到容器中,而无需任何有关大小的先决条件。但是,另一个选项包括使用std::getline计数器:

int count = 0;
for (; std::getline(file, line); ++count);
于 2013-11-08T22:59:35.517 回答
0

如果您尝试创建一个字符串数组,每个字符串都是一行,请阅读两次。第一次,数线。如果您的文件可能出于某种原因异步更改,或者如果它不可搜索,sstream请在完成后将您读入的每个字符通过管道传输到 an 中。然后,您知道您需要的数组的大小。将您的流寻找到 0 (如果您没有将其复制到sstream)并从头开始填充数组。

如果您只需要知道文件的字符大小,fstream请使用该gcount方法。

或者,使用适当的容器,如vector,它将根据需要扩展。

于 2013-11-09T00:00:51.210 回答
0

不要费心找出您认为文件将有多大:

  1. 无论如何,它不会告诉您行数。
  2. 根据系统的不同,它可能会改变(在 POSIX 系统上,文件可以在另一个进程写入时读取)。
  3. 如果文件不是真正的文件而是实际上是流的东西,则它不起作用。

只需将这些行读入合适的容器即可。如果您担心重新定位内容,请使用std::deque<std::string>: 它不会重新定位其内容。

std::deque<std::string> lines;
for (std::string line; std::getline(file, line); ) {
    lines.push_back(line);
}
于 2013-11-08T23:12:37.113 回答