Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中读取文件系统时出现问题+;(不编译)_C++_Boost_Mingw - Fatal编程技术网

C++ 在C+中读取文件系统时出现问题+;(不编译)

C++ 在C+中读取文件系统时出现问题+;(不编译),c++,boost,mingw,C++,Boost,Mingw,我试图编写一个C++程序,需要递归地扫描一个目录,以获取特定扩展的所有文件,并获得其文件名和数据最后修改。p> 根据我的研究,Stack OverFlow的建议似乎是使用C++17/“boost/filesystem.hpp”库来实现这一点 我在64位Windows 10机器上使用代码::Blocks 17.12 32位和MinGW GCC 5 32位。这个编译器不承认它是一个内置库(这是正确的,因为它直到GCC7才被引入)。是否有MinGW GCC 7编译器可用 在没有这个编译器的情况下,我尝

我试图编写一个C++程序,需要递归地扫描一个目录,以获取特定扩展的所有文件,并获得其文件名和数据最后修改。p> 根据我的研究,Stack OverFlow的建议似乎是使用C++17/“boost/filesystem.hpp”库来实现这一点


我在64位Windows 10机器上使用代码::Blocks 17.12 32位和MinGW GCC 5 32位。这个编译器不承认它是一个内置库(这是正确的,因为它直到GCC7才被引入)。是否有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;

}

最后,我对三种方法中的哪一种并不特别感兴趣,因为我正在编写三个共享库的程序,它们只在我的机器上运行,另一个是相同的。我不担心便携性或速度


谢谢

Windows中的PATH环境变量是一个长字符串,用;分隔;。 因此,在添加新目录时,您应该使用;(分号)


“是否有MinGW GCC 7编译器可用?”-是的,例如。它似乎包括boost/filesystem下的新文件系统库,而不是它自己的库。预编译的头文件工作正常,但boost/filesystem似乎没有预编译,我仍然无法使用它。我在cmd run语句中添加了分号,正如您所指定的,现在我遇到了一个新错误,我将其添加到cmd参数中,但得到了相同的错误。什么需要那个变量集?它在图书馆的某个地方吗?
cd C:\Program Files\Boost\boost_1_67_0
path C:\Program Files (x86)\CodeBlocks\MinGW\bin %path%
bootstrap mingw
###
### 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
path C:\Program Files (x86)\CodeBlocks\MinGW\bin; %path%