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

时间:2016-02-28 14:35:01

标签: c++

我有数百个按文件排序的.txt文件:1.txt,2.txt,3.txt,... n.txt。在每个文件中有两列带有十进制数字。 我编写了一个算法,只对一个.txt文件执行一些操作,现在我想以递归方式对所有文件执行相同操作。 This helpful question让我知道我正在做什么。 现在我正在尝试编写一个算法来读取所有文件:

#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左右),但我得到无限输出。如果有人能指出我在代码中所犯的错误,我会很高兴的... 我在Linux上使用gcc 5.2.1。 谢谢!

2 个答案:

答案 0 :(得分:3)

  • 6元素数组太短而无法存储"200.txt"。它必须至少有8个元素。
  • 条件n=200错误且始终为真。它应该是n<=200

答案 1 :(得分:0)

如果您的所有文件都在同一目录中,您也可以使用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
        });

我认为这是一个更清洁的解决方案。