我试图从目录中读取多个文件并在我的程序中使用它们,然后再转到目录中的其他文件

时间:2015-11-30 20:16:15

标签: c++ unix

我有一个包含188个文件的目录,看起来像这样。

001_AU01_query.dat  
001_AU12_query.dat  
001_AU17_query.dat    
001_template.dat  
002_AU01_query.dat  
002_AU12_query.dat  
002_AU17_query.dat  
002_template.dat  

这一直重复到047_AU
我的程序需要做的是接收一个查询文件和相应的模板文件,即(使用带有001_template.dat文件的001_AU01_query.dat)并运行代码。然后使用具有相同模板文件的下一个001_AU文件。这将一直重复到047.

我可以手动输入一个查询文件和一个模板文件,它可以正常工作。我只是不知道如何使用目录中的所有文件。

int main(int argc, char *argv[])
    {
      string outFileName = "";
      string templateFile = "";
      string queryData = "";
      ofstream outStream;

      Scanner inStreamTemp;
      Scanner inStreamQuery;

      calc calc;

      Utils::CheckArgs(3, argc, argv, "queryData templateFile outFileName");
      queryData = "data_project_part1/001_AU01_query.dat";   
      templateFile = "data_project_part1/001_template.dat";
      outFileName = "outFile";

      Utils::FileOpen(outStream, outFileName);

      if (Utils::FileDoesNotExist(queryData)||Utils::FileDoesNotExist(templateFile))
      {
        cout << "ERROR: query data file or template file name does not exist" << endl;
        exit(0);
      }

      inStreamQuery.openFile(queryData);
      inStreamTemp.openFile(templateFile);

      calc.initialize(inStreamQuery, inStreamTemp); 
      calc.runComputation(outStream);


      outStream << "Query File: " << queryData << "\n" << "Template File: " << templateFile << "\n" << "The ten closests neighbors are:\n" << calc.toStringResults() << "\n" << endl;
      outStream.flush();

      Utils::FileClose(outStream);

      return 0;
    }

1 个答案:

答案 0 :(得分:0)

一种方法是将文件名放在一个列表中并循环遍历该列表。 您可以将这些名称复制并粘贴到文本编辑器中,将其存储在列表中,保存在记事本中,逐行读取并添加到列表中。

然后遍历该列表并使用foreach循环从每个列表中读取