Проблемы чтения FileSystem в C ++ (Boost не компилируется) - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь написать программу на C ++, которая должна рекурсивно сканировать каталог на наличие всех файлов с определенным расширением и получить их путь к файлу и данные, которые были изменены в последний раз.

Из моего исследования выяснилось, что рекомендация от Stack OverFlow - использовать библиотеку C ++ 17 / "boost / filesystem.hpp" для этого.

Я использую Code :: Blocks 17.12 32 бит с MinGW GCC 5 32 бит на 64 битной машине Windows 10. Этот компилятор не распознает как встроенную библиотеку (правильно, так как это не было введено до GCC 7). Есть ли в наличии компилятор MinGW GCC 7?

В отсутствие этого компилятора я попытался использовать алгоритм, найденный здесь, и он не распознает каталог, который я через него проложил.

vector< pair<string, FILETIME> > searchDir(const string searchPath, const string searchStr) {
    // Function to get list of files and their last modified date from a directory
    cout << "searchDir(" << searchPath << ", " << searchStr << ")" << endl;
    string filePath;
    FILETIME lastEdit;

    vector< pair<string, FILETIME> > files;


    struct _finddata_t dirFile;
    intptr_t hFile;

    //if (( hFile = _findfirst( searchPath.c_str(), &dirFile )) != -1 )
    if (( hFile = _findfirst( "C:/", &dirFile )) != -1 )
    {
      do
      {
         if ( !strcmp( dirFile.name, "."   )) continue; // Don't iterate through self
         if ( !strcmp( dirFile.name, ".."  )) continue; // Don't iterate through parent dir
         if ( TRUE )
         {
            if ( dirFile.attrib & _A_HIDDEN ) continue;
            if ( dirFile.name[0] == '.' ) continue;
         }

         // dirFile.name is the name of the file
         string fileName = dirFile.name;
         cout << fileName << endl;
         int len = fileName.length();
         string ext = fileName.substr(len-4, len - 1);
         if ( !ext.compare(searchStr))
         {
            // Found a match
            FileTimes f(filePath);
            pair<string, FILETIME> file (filePath, f.getWritten());
            files.push_back(file);
         }


      } while ( _findnext ( hFile, &dirFile ) == 0 );
      _findclose( hFile );
    } else {cout << "Search Path not found" << endl;}



    return files;

}

Из-за этой ошибки я попытался использовать Boost. Я могу скомпилировать программы в Code :: Blocks, используя предварительно собранные заголовки, но нет библиотеки, которую нужно скомпилировать, и компиляция завершается неудачно, говоря, что «gcc» не является допустимой командой.

Каталог с gcc.exe - «C: \ Program Files (x86) \ CodeBlocks \ MinGW \ bin», а каталог с усилением - «C: \ Program Files \ Boost \ boost_1_67_0»

Я запустил командную строку от имени администратора в каталоге boost, назначил каталог gcc в качестве переменной моего пути и попытался скомпилировать:

cd C:\Program Files\Boost\boost_1_67_0
path C:\Program Files (x86)\CodeBlocks\MinGW\bin %path%
bootstrap mingw

«gcc» не распознается как внутренняя или внешняя команда,

###
### Using 'mingw' toolset.
###

C:\Program Files\Boost\boost_1_67_0\tools\build\src\engine>if exist bootstrap rd /S /Q bootstrap 

C:\Program Files\Boost\boost_1_67_0\tools\build\src\engine>md bootstrap 

C:\Program Files\Boost\boost_1_67_0\tools\build\src\engine>gcc -DNT -o bootstrap\jam0.exe  command.c compile.c constants.c debug.c execcmd.c execnt.c filent.c frames.c function.c glob.c hash.c hdrmacro.c headers.c jam.c jambase.c jamgram.c lists.c make.c make1.c object.c option.c output.c parse.c pathnt.c pathsys.c regexp.c rules.c scan.c search.c subst.c timestamp.c variable.c modules.c strings.c filesys.c builtins.c md5.c class.c cwd.c w32_getreg.c native.c modules/set.c modules/path.c modules/regex.c modules/property-set.c modules/sequence.c modules/order.c 

C:\Program Files\Boost\boost_1_67_0\tools\build\src\engine>exit /b 9009

В конце я не знаю, какой из трех методов я получаю, поскольку пишу 3 программы с общими библиотеками, которые будут запускаться только на моей машине, и другую, которая идентична. Я не беспокоюсь о мобильности или скорости.

Спасибо!

1 Ответ

0 голосов
/ 15 мая 2018

переменная окружения PATH в Windows - это длинная строка, разделенная;;Поэтому при добавлении нового каталога вы должны добавить его с помощью;(точка с запятой).

path C:\Program Files (x86)\CodeBlocks\MinGW\bin; %path%
...