如何保存字符串并按顺序读/写它们

时间:2013-11-08 22:55:30

标签: c++ string io

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

3 个答案:

答案 0 :(得分:2)

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

int count = 0;
for (; std::getline(file, line); ++count);

答案 1 :(得分:0)

不要费心找出你认为该文件的大小:

  1. 无论如何它都没有告诉你行数。
  2. 根据系统的不同,它可能会发生变化(在POSIX系统上,文件可以在另一个进程写入时读取)。
  3. 如果文件实际上不是文件,而是实际上是一个流,则它不起作用。
  4. 只需将线条读入合适的容器即可。如果您担心重新定位内容,请使用std::deque<std::string>:它不会重新定位其内容。

    std::deque<std::string> lines;
    for (std::string line; std::getline(file, line); ) {
        lines.push_back(line);
    }
    

答案 2 :(得分:0)

如果您正在尝试创建一个字符串数组,每个字符串都是一行,请将其读取两次。第一次,计算线。如果您的文件因任何原因可能异步更改,或者它不可搜索,请在完成后将您阅读的每个字符输入sstream。然后,您知道所需阵列的大小。将您的流搜索为0(如果您没有将其复制到sstream)并从开头填充数组开始。

如果您只需要知道文件在字符中有多大,fstream就有gcount方法。

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