Читать все файлы в каталоге? - PullRequest
6 голосов
/ 28 апреля 2010

Как бы я прочитал все файлы в каталоге?

В C # я бы получил объект DirectoryInfo и все файлы в объект FileInfo [].

Есть ли подобная функциональность в пространстве имен STD в C ++?

Ответы [ 6 ]

13 голосов
/ 28 апреля 2010

Для бесплатного портативного решения попробуйте Boost Filesystem Library .

6 голосов
/ 28 апреля 2010

Используя Windows API, вы можете найти все файлы в каталоге, используя FindFirstFile () с FindNextFile () в цикле.

1 голос
/ 28 апреля 2010

Не думаю, что в std есть что-либо, но вы можете использовать функции readdir () и opendir () C.

1 голос
/ 28 апреля 2010

Нет, как это сделать, зависит от того, в какой операционной системе вы находитесь.

Поскольку вы используете C #, я предполагаю, что вы используете операционную систему Windows. Для окон см. http://msdn.microsoft.com/en-us/library/aa365200(VS.85).aspx о том, как вывести список всех файлов в каталоге. Затем используйте эту информацию, чтобы открыть эти файлы.

0 голосов
/ 29 апреля 2010

Используйте библиотеку файловой системы boost (как кто-то еще упомянул). Тот же API будет в следующей стандартной библиотеке, так что это, безусловно, лучший подход для использования с новыми проектами, если вам абсолютно не нужно то, чего он не делает.

0 голосов
/ 28 апреля 2010

Чтобы уточнить ответ 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...