многократное чтение из папки - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно прочитать все файлы из папки и записать в буфер.Все файлы имеют одинаковое имя, кроме последней части (file_0000.mdf, file_0001.mdf, .... file_9999.mdf).Как я могу прочитать все файлы?testFolder содержит все файлы.Если я перейду к for_loop, он начнется с 0, но мои тестовые файлы начинаются с 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 голосов
/ 15 ноября 2018

Вы можете использовать функции FindFirstFile() и FindNextFile(), сканирующие файлы в каталоге с использованием подстановочного знака, то есть "C: \ Data \ file _ ???. Mdf". Возвращенное значение WIN32_FIND_DATA будет также содержать размер файла.

Взгляните на полный пример " Перечисление файлов в каталоге ".

Как только файл указан в списке, вы можете читать его содержимое с помощью ifstream как обычно.

0 голосов
/ 15 ноября 2018

Простые целые числа не имеют ведущих нулей.Чтобы получить начальные нули, вам нужно использовать другой способ форматирования имен файлов.Например, используя std::ostringstream и стандартные Манипуляторы ввода / вывода , такие как std::setw и std::setfill:

std::ostringstream oss;
oss << path << constName << std::setw(4) << std::setfill('0') << i << lastName;
fileWithPath = oss.str();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...