实现:递归遍历目录

#include<stdio.h>
#include<windows.h>

DWORD EnumerateFileInDirectory(LPCWSTR szPath){
	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;
	wchar_t szFilePath[MAX_PATH];
	wchar_t szFullPath[MAX_PATH]; //绝对路径

	lstrcpy(szFilePath, szPath);
	lstrcat(szFilePath, L"\\*");

	hListFile = FindFirstFile(szFilePath, &FindFileData);
	if(hListFile == INVALID_HANDLE_VALUE){
		printf("错误:%d \n", GetLastError());
		return 1;
	}else {
		do {
			if (lstrcmp(FindFileData.cFileName, L".") == 0 || lstrcmp(FindFileData.cFileName, L"..") == 0){
				continue;
			}


			wsprintf(szFullPath, L"%ls\\%ls", szPath, FindFileData.cFileName);
			//printf("%ls\\%ls", szPath, FindFileData.cFileName);
			printf("\n%ls\t", szFullPath);
			//if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) { //判断文件的属性是否为隐藏,如果是的话 输出个前缀为HIDDEN
			//	printf("<HIDDEN> ");
			//}
			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { //判断是否是目录,如果是的话 输出个前缀为DIR
				printf("\t<DIR>");
				EnumerateFileInDirectory(szFullPath);
			}
			
			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) {
				printf("\t<FILE>");
			}

			//printf("\n");

		} while (FindNextFile(hListFile, &FindFileData));
	}
	printf("\n");
	return 0;
}



int main() {
	/*
	 * API
	 * FindFirstFile
	 * FindNextFile
	 * WIN32_FIND_DATA
	*/
	EnumerateFileInDirectory(L"C:\\Users\\dell\\source\\repos\\msgboxtest");
	system("pause");
	return 0;
}

结果如下:

posted @ 2019-12-04 14:16  zpchcbd  阅读(262)  评论(0编辑  收藏  举报