递归遍历整个目录的代码

来源:互联网 发布:win10关闭网络唤醒 编辑:程序博客网 时间:2024/06/05 06:20


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


char file_name[1024*1024][100] = {0};




BOOL IsRoot(LPCTSTR lpszPath) 

TCHAR szRoot[4]; 
wsprintf(szRoot, "%c:\\", lpszPath[0]); 
return (lstrcmp(szRoot, lpszPath) == 0); 



long cnt = 0;
void FindInAll(::LPCTSTR lpszPath) 
{
TCHAR szFind[MAX_PATH]; 
lstrcpy(szFind, lpszPath); 
if (!IsRoot(szFind)) 
lstrcat(szFind, "\\"); 
lstrcat(szFind, "*.*"); // 找所有文件 
WIN32_FIND_DATA wfd; 
HANDLE hFind = FindFirstFile(szFind, &wfd); 
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败 
return; 


do 

if (wfd.cFileName[0] == '.') 
continue; // 过滤这两个目录 
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 

TCHAR szFile[MAX_PATH]; 
if (IsRoot(lpszPath)) 
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); 
else 
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); 
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归 

else 

TCHAR szFile[MAX_PATH]; 
if (IsRoot(lpszPath)) 
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); 
else 
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); 
//printf("%s\n",szFile); 

// 对文件进行操作 
memcpy(&file_name[cnt++][0],  szFile, strlen(szFile) + 1);

} while (FindNextFile(hFind, &wfd)); 
FindClose(hFind); // 关闭查找句柄 





void FindInAll_del(::LPCTSTR lpszPath) 
{
TCHAR szFind[MAX_PATH]; 
lstrcpy(szFind, lpszPath); 
if (!IsRoot(szFind)) 
lstrcat(szFind, "\\"); 
lstrcat(szFind, "*.*"); // 找所有文件 
WIN32_FIND_DATA wfd; 
HANDLE hFind = FindFirstFile(szFind, &wfd); 
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败 
return; 


do 

if (wfd.cFileName[0] == '.') 
continue; // 过滤这两个目录 
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 

TCHAR szFile[MAX_PATH]; 
if (IsRoot(lpszPath)) 
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); 
else 
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); 
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归 

else 

TCHAR szFile[MAX_PATH]; 
if (IsRoot(lpszPath)) 
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName); 
else 
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName); 
printf("%s\n",szFile); 


// 对文件进行操作 
memcpy(&file_name[cnt++][0],  szFile, strlen(szFile) + 1);

} while (FindNextFile(hFind, &wfd)); 
FindClose(hFind); // 关闭查找句柄 





int main(int argc, char* argv[]) 

//FindInAll("C:\\Users\\cui\\Desktop\\del\\del\\del\\test_dir"); 
FindInAll("F:\\linux-2.6.37"); 

printf("\n");
int index = 0;
while(file_name[index][0]){
printf("%s\n", &file_name[index][0]);
index++;
}


printf("index:%d\n", index);


getchar();
return 0; 
0 0
原创粉丝点击