Чтобы уточнить ответ 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;
}