阅读目录中的所有文件?

时间:2010-04-28 18:51:57

标签: c++ file-io

我如何阅读目录中的所有文件?

在C#中,我将获得一个DirectoryInfo对象,并将所有文件放入FileInfo []对象。

C ++中的STD命名空间中是否有类似的功能?

6 个答案:

答案 0 :(得分:13)

对于免费的便携式解决方案,请尝试Boost Filesystem Library

答案 1 :(得分:6)

使用Windows API,您可以在循环中使用FindFirstFile()FindNextFile()找到目录中的所有文件。

答案 2 :(得分:1)

不,如何完成取决于您所使用的操作系统。

由于您使用的是C#,我假设您使用的是Windows操作系统。对于Windows,请参阅http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx有关如何列出目录中的所有文件的信息。然后使用该信息打开这些文件。

答案 3 :(得分:1)

我认为std中没有任何内容,但您可以使用readdir()opendir() C函数。

答案 4 :(得分:0)

详细说明Dave18的答案,我在这里有一个使用FindFirst / NextFile的功能。如果你来自C#,它可能不是非常简单,所以一个例子可以帮助。

bool EnumDirectory( LPCTSTR szPath, std::vector<std::string>& rtList,
                    bool bIncludeDirs, bool bIncludeFiles )
{
   HANDLE hFind;
   WIN32_FIND_DATA FindFileData;
   std::string strDirPath = ( szPath ) ? szPath : "";
   // Throw on a trailing backslash if not included
   if( !strDirPath.empty() && strDirPath[ strDirPath.length() - 1 ] != '\\' )
      strDirPath += "\\";
   // Looking for all files, so *
   strDirPath += "*";

   hFind = FindFirstFile( strDirPath.c_str(), &FindFileData );
   if( hFind == INVALID_HANDLE_VALUE ) return false;
   while( FindNextFile( hFind, &FindFileData ) )
   {
      if( !strcmp( FindFileData.cFileName, "." ) ||
          !strcmp( FindFileData.cFileName, ".." ) ) continue;

      if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
      {
         if( bIncludeDirs ) rtList.push_back( FindFileData.cFileName );
      }
      else
      {
         if( bIncludeFiles ) rtList.push_back( FindFileData.cFileName );
      }
   }
   FindClose( hFind );
   return true;
}

答案 5 :(得分:0)

使用boost文件系统库(正如其他人提到的那样)。相同的API将在下一个标准库中,因此它肯定是用于新项目的最佳方法,除非您绝对需要它不会做的事情。