ディレクトリ内のフィルタリングされたファイルを一覧表示しようとしています。3 文字の拡張子を使用すると、コードは正常に動作します 4 文字の拡張子を使用すると、コードがクラッシュします
Visual Studio 2012 でコードを実行しています
私が使用する場合
ListDirectoryContents(L"*.txt", &x, pList_Files);
大丈夫です。
私が使用する場合
ListDirectoryContents(L"*.txtx", &x, pList_Files);
コードがクラッシュします。
bool ListDirectoryContents
(const wchar_t * sDir, unsigned int * Num_files, wchar_t ** FileList)
{
WIN32_FIND_DATA fdFile;
HANDLE hFind = NULL;
wchar_t sPath[2048];
unsigned int k = 0;
wsprintf(sPath, L"%s", sDir);
if((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE)
{
wprintf(L"Path not found: [%s]\n", sDir);
return false;
}
do
{
//Find first file will always return "."
// and ".." as the first two directories.
if(wcscmp(fdFile.cFileName, L".") != 0 && wcscmp(fdFile.cFileName, L"..") != 0)
{
//Build up our file path using the passed in
// [sDir] and the file/foldername we just found:
//wsprintf(sPath, L"%s\\%s", sDir, fdFile.cFileName);
wsprintf(sPath, L"%s", fdFile.cFileName);
//Is the entity a File or Folder?
if(fdFile.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
{
//wprintf(L"Directory: %s\n", sPath);
ListDirectoryContents(sPath, Num_files, FileList); //Recursion, I love it!
}
else
{
wsprintf(FileList[k], L"%s", fdFile.cFileName);
//wsprintf(FileList[k], L"%s", sPath);
k++;
//wprintf(L"%s \n", sPath);
}
}
}
while(FindNextFile(hFind, &fdFile)); //Find the next file.
FindClose(hFind); //Always, Always, clean things up!
*Num_files = k;
return true;
}