在C ++中读取FileSystem的问题(Boost not compiling)

时间:2018-05-15 12:46:25

标签: c++ boost mingw

我正在尝试编写一个C ++程序,该程序需要递归扫描目录以查找特定扩展名的所有文件,并获取其文件路径和数据最后修改。

从我的研究看来,Stack OverFlow的建议是使用C ++ 17 /“boost / filesystem.hpp”库来实现这一目标。

我在64位Windows 10计算机上使用Code :: Blocks 17.12 32 bit和MinGW GCC 5 32位。这个编译器不能识别为内置库(这是正确的,因为直到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' is not a recognized as an internal or external command,

###
### 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 :(得分:0)

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

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