我需要从文件夹中读取所有文件并写入缓冲区。除最后一部分(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;
}
答案 0 :(得分:0)
普通整数没有前导零。要获得前导零,您需要使用其他方式格式化文件名。例如,使用std::ostringstream
和标准I/O manipulators,例如std::setw
和std::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
阅读其内容。