我如何阅读目录中的所有文件?
在C#中,我将获得一个DirectoryInfo对象,并将所有文件放入FileInfo []对象。
C ++中的STD命名空间中是否有类似的功能?
答案 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)
答案 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将在下一个标准库中,因此它肯定是用于新项目的最佳方法,除非您绝对需要它不会做的事情。