如何使用不同的输入文件多次运行c ++程序?

时间:2018-05-02 16:43:30

标签: c++ file input

我是C ++的新手并撰写我的硕士论文,非常感谢我能得到的任何帮助!

我有一个程序读取txt文件,然后进行一堆计算,并返回一个新的txt文件。问题是我想为100多个不同的输入文件运行这个程序。现在我必须在代码中更改输入文件的名称,但我想让它自己运行我文件夹中的所有输入文件。

我使用的是Visual Studio,但只有很少的C ++经验。

谢谢:)

4 个答案:

答案 0 :(得分:1)

使用bash,你可以使用:

运行它们
$ for file in /Data/*.txt; do /path/your_program $file; done

答案 1 :(得分:1)

请参阅此代码段。由于您使用的是MSCV,因此需要在此控制台应用程序的配置中启用MFC。另外在#include "afx.h"中添加#include "stdafx.h",其中CFileFind已定义。 PopulateFromFolder()应自动将文件加载到向量files

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <vector>   

using namespace std;

void PopulateFromFolder(string path, vector<string>& files)
{
    CFileFind   finder;
    CString fileName;
    fileName.Format(L"%s*.*", CString(path.c_str()));
    BOOL bOk = finder.FindFile(fileName);
    while (bOk)
    {
        bOk = finder.FindNextFile();

        if (finder.IsDots())
        {
            continue;
        }
        if (!finder.IsDirectory())
        {
            CString strFileName = finder.GetFileName();
            files.push_back(CStringA(strFileName).GetString());
        }
    }
    finder.Close();
}

int main()
{
    vector<string> files;
    string path = "D:\\MyFolder\\";
    PopulateFromFolder(path, files);

    auto a = path + files[0];
    int i = 0;
    while (i< files.size()-1)
    {
        cout << "processing " << files[i + 1] << endl;
        ifstream fs(path+files[i++]);
        if (fs.is_open())
        {
            //do something
        }
        fs.close();
    }
    return 0;
}

输出:

enter image description here

答案 2 :(得分:0)

您可以为输入文件名定义格式,然后放入某个目录。例如,

Input1.txt
Input2.txt
...
Input111.txt

然后使用某种for循环:

for(int i = 1; i <= 111; ++i)
{
    ifstream file("Input" + std::to_string(i) + ".txt");
    if (file.is_open())
        Operate(file);
}

如果您不知道文件的确切数量,可以通过is_open()方法检查文件是否已打开。这样,可以不存在具有某些数字的文件。您只需循环输入最大可能的输入文件ID。

这是一个不需要任何依赖关系的解决方案。但如果你不介意,你实际上可能会考虑Boost.Filesystem。这是一个example

答案 3 :(得分:0)

您可以尝试使用std::experimental::filesystemhttp://en.cppreference.com/w/cpp/experimental/fs)。我想这个库中的directory_iterator对你有用 - 它允许你迭代给定目录中的所有文件。请查看文档中提供的示例:http://en.cppreference.com/w/cpp/experimental/fs/directory_iterator。 但是,您必须确保使用新标准编译代码(C ++ 17)。

另一种方法是制作一个单独的文件,其中包含您要处理的所有文件的名称列表。然后,您可以阅读此列表,并为每个文件执行您需要的操作。