从文件夹多次读取

时间:2018-11-15 15:10:46

标签: c++ visual-c++

我需要从文件夹中读取所有文件并写入缓冲区。除最后一部分(file_0000.mdf,file_0001.mdf,.... file_9999.mdf)外,所有文件都具有相同的名称。我如何读取所有文件? testFolder包含所有文件。如果我使用for_loop,它将从0开始,但是我的test_files从0000开始,依此类推。另外,我需要每个单独的测试文件的文件大小。我的逻辑是错误的,但我不知道如何解决。在第一种方法下面还提供了一些更新的代码。

#include <iostream>
#include <fstream>
#include <string>
int main(){

std::string path="C:\\testFolder\\";
std::string constName="file_";
std::string lastName = ".mdf";
std::fstream InputStream;
std::string fileWithPath;

for (int i=0; i <9999;i++){

    fileWithPath=path+constName+std::to_string(static_cast<long long> 
    (i)+lastName;
     InputStream.open(fileWithPath,std::ios::binary);
     long InputFileSize= InputStream.tellg();
    }

  return 0;
  }

使用boost / filesystem进行简短更新。需要对此方法发表评论。

#include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>

std::string SourceFolder="C:\\testFolder\\";
path mDirectory(SourceFolder);

std::cout<<"Directory includes the following files"
if(is_directory(mDirectory)){
for(auto testFile=mDirectory.begin();testFile!=mDirectory.end();testFile++){
    std::cout<< testFile->string()<<std::endline;   
}

2 个答案:

答案 0 :(得分:0)

普通整数没有前导零。要获得前导零,您需要使用其他方式格式化文件名。例如,使用std::ostringstream和标准I/O manipulators,例如std::setwstd::setfill

std::ostringstream oss;
oss << path << constName << std::setw(4) << std::setfill('0') << i << lastName;
fileWithPath = oss.str();

答案 1 :(得分:0)

您可以使用FindFirstFile()FindNextFile()函数使用通配符(即“ C:\ Data \ file _ ???。mdf”)扫描目录中的文件。 返回的WIN32_FIND_DATA还将包含文件大小。

看看完整的示例“ Listing the Files in a Directory”。

列出文件后,您可以照常使用ifstream阅读其内容。