C++ - 按顺序打开文本文件

C++ - Opening text files sequentially

本文关键字:文本 文件 顺序 C++      更新时间:2023-10-16

我有数百个按编号排序的.txt文件:1.txt、2.txt、3.txt,...n.txt. 在每个文件中,有两列带有十进制数字。我编写了一个算法,可以单独对一个.txt文件执行一些操作,现在我想递归地对所有文件执行相同的操作。这个有用的问题让我对我想做什么有所了解。现在我正在尝试编写一个算法来读取所有文件:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main () 
{
int i, n;
char filename[6];
double column1[100], column2[100];
for (n=1;n=200;n++)
{
sprintf(filename, "%d.txt", n);
ifstream datafile;
datafile.open(filename);
    for (i=0;i<100;i++)
    {
    datafile >> column1[i] >> column2[i];
    cout << column1[i] << column2[i];
    }
datafile.close();
}
return 0;
}

我认为代码正在做什么:它创建从 1.txt 到 200.txt 的字符串名称,然后打开具有这些名称的文件。对于每个文件,前 100 列将关联到数组 column1 和 column2,然后值将显示在屏幕上。编译时我没有收到任何错误,但是当我运行它时,输出很大,根本不会停止。如果我将输出设置为.txt文件,它很容易达到一些 Gb!我还尝试减少循环数并减少列数(到 3 左右),但我直到得到无限的输出。如果有人能指出我在代码中犯的错误,我会很高兴......我正在使用 gcc 5.2.1 和 Linux。谢谢!

  • 6 元素数组太短,无法存储"200.txt" 。它必须至少为 8 个元素。
  • 条件n=200是错误的,并且总是正确的。应该是n<=200.

如果你的所有文件都在同一个目录中,你也可以使用 boost::filesystem ,例如:

auto path = "path/to/folder";
std::for_each(boost::filesystem::directory_iterator{path},
        boost::filesystem::directory_iterator{},
        [](boost::filesystem::directory_entry file){
            // test if file is of the correct type
            // do sth with file
        });

我认为这是一个更干净的解决方案。