C++ 从文件夹中多次读取
我需要读取文件夹中的所有文件并写入缓冲区。除最后一部分(文件_0000.mdf、文件_0001.mdf、..file _9999.mdf)外,所有文件都具有相同的名称。如何读取所有文件?testFolder包含所有文件。如果我使用for_循环,它将从0开始,但我的test_文件从0000开始,依此类推。另外,我需要每个测试文件的文件大小。我的逻辑是错误的,但我不知道如何纠正它。第一种方法下面还提供了一些更新的代码C++ 从文件夹中多次读取,c++,visual-c++,C++,Visual C++,我需要读取文件夹中的所有文件并写入缓冲区。除最后一部分(文件_0000.mdf、文件_0001.mdf、..file _9999.mdf)外,所有文件都具有相同的名称。如何读取所有文件?testFolder包含所有文件。如果我使用for_循环,它将从0开始,但我的test_文件从0000开始,依此类推。另外,我需要每个测试文件的文件大小。我的逻辑是错误的,但我不知道如何纠正它。第一种方法下面还提供了一些更新的代码 #include <iostream> #include <fs
#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;
}
#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;
}
#包括
#包括
#包括
int main(){
std::string path=“C:\\testFolder\\”;
std::string constName=“文件”;
std::string lastName=“.mdf”;
std::fstream输入流;
std::string fileWithPath;
对于(int i=0;i普通整数没有前导零。要获取前导零,您需要使用其他格式化文件名的方法。例如,使用和标准,如std::setw
和std::setfill
:
std::ostringstream oss;
oss << path << constName << std::setw(4) << std::setfill('0') << i << lastName;
fileWithPath = oss.str();
std::ostringstream oss;
oss您可以使用FindFirstFile()
和FindNextFile()
函数使用通配符扫描目录中的文件,即“C:\Data\file_???.mdf”。
返回的文件还将包含文件大小
请看完整的示例“”
一旦一个文件被列出,你可以像往常一样用ifstream
读取它的内容。你不关闭就调用fstream::open
。这不起作用。关于格式化数字检查std::stringstream
,setfill
和setw
。如果你能使用C++17,请看一下。请不要编辑问题在某种程度上,现有的答案是没有意义的。你可以打开另一个问题。