它仅在系统音量上失败。
#ifndef UNICODE
#define UNICODE
#endif
#include <stdio.h>
#include <Windows.h>
void EndWithBackslash(TCHAR* string)
{
if(string[wcslen(string)-1] != TEXT('\\')) wcscat(string,TEXT("\\"));
}
void Browse(const TCHAR* curdir)
{
HANDLE hFoundFile;
WIN32_FIND_DATA foundFileData;
TCHAR buffer[MAX_PATH];
wcscpy(buffer,curdir);
EndWithBackslash(buffer);
SetCurrentDirectory(buffer);
hFoundFile = FindFirstFileEx(TEXT("*"),FINDEX_INFO_LEVELS::FindExInfoBasic,&foundFileData ,FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories ,NULL , NULL);
if(hFoundFile != INVALID_HANDLE_VALUE)
{
do
{
if ((foundFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && wcscmp(foundFileData.cFileName,TEXT(".")) && wcscmp(foundFileData.cFileName,TEXT("..")) )
{
TCHAR pszItemPath[MAX_PATH];
wcscpy(pszItemPath, buffer);
EndWithBackslash(pszItemPath);
wcscat(pszItemPath,foundFileData.cFileName);
wprintf(TEXT("%s\n"),pszItemPath);
Browse(pszItemPath);
}
}
while(FindNextFile(hFoundFile,&foundFileData));
}
FindClose(hFoundFile);
}
int main(void)
{
_wsystem(TEXT("chcp 65001"));
Browse(TEXT("C:\\"));
_wsystem(TEXT("Pause"));
return 0;
}
最后几行输出,就在运行时错误之前:
C:\$Recycle.Bin\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S- 1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1- 5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5- 20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\ S-1-5-20\S-1-5-20\S-1-5-20\S-1-5\S-1-5-20 C:\$Recycle.Bin\S-1-5 -20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20 \S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S -1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1 -5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5 -20\S-1-5-20\S-1-5\S-1-5-20 C:\$Recycle.Bin\S-1-5-20\S-1-5-20\S- 1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1- 5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5- 20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\ S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S-1-5-20\S- 1-5 \S-1-5-20
有什么优雅的方法可以解决吗?我想避免删除这个伪目录(超级用户已经很好地解释了它)或在我的算法中设置名称过滤器。