分类: C/C++
2011-07-15 09:53:55
#include "stdafx.h" #include <windows.h> #define FILEILTER "*.*" BOOL IsRoot(LPCTSTR lpszPath) { TCHAR szRoot[4]; wsprintf(szRoot, "%c:\\", lpszPath[0]); return (lstrcmp(szRoot, lpszPath) == 0); } void FindInAll(LPCTSTR lpszPath) { TCHAR szFind[MAX_PATH]; lstrcpy(szFind, lpszPath); if (!IsRoot(szFind)) lstrcat(szFind, "\\"); lstrcat(szFind, FILEILTER); // 找所有文件 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); } // 对文件进行操作 } } while (FindNextFile(hFind, &wfd)); FindClose(hFind); // 关闭查找句柄 } int main(int argc, char* argv[]) { FindInAll("C:\\TEST"); return 0; }
//#include "stdafx.h" #include <stdio.h> #include <windows.h> #define FILEILTER "*.*" FILE *fp; BOOL IsRoot(LPCTSTR lpszPath) { TCHAR szRoot[4]; wsprintf(szRoot, "%c:\\", lpszPath[0]); return (lstrcmp(szRoot, lpszPath) == 0); } void PrintFileDetail(WIN32_FIND_DATA *wfd) { SYSTEMTIME sysTime; fprintf(fp,"文件名:%s\n",wfd->cFileName); FileTimeToSystemTime(&(wfd->ftCreationTime),&sysTime); fprintf(fp,"文件的创建时间 :%d年 %d月 %d日 星期%d, %d时 %d分 %d秒\n", sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wDayOfWeek,sysTime.wHour+8,sysTime.wMinute,sysTime.wSecond); FileTimeToSystemTime(&(wfd->ftLastAccessTime),&sysTime); fprintf(fp,"文件的最后访问时间 :%d年 %d月 %d日 星期%d, %d时 %d分 %d秒\n", sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wDayOfWeek,sysTime.wHour+8,sysTime.wMinute,sysTime.wSecond); FileTimeToSystemTime(&(wfd->ftLastWriteTime),&sysTime); fprintf(fp,"文件的最后修改时间 :%d年 %d月 %d日 星期%d, %d时 %d分 %d秒\n", sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wDayOfWeek,sysTime.wHour+8,sysTime.wMinute,sysTime.wSecond); fprintf(fp,"文件属性:"); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) fprintf(fp,"归档 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) fprintf(fp,"压缩文件 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) fprintf(fp,"隐藏 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_READONLY) fprintf(fp,"只读 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) fprintf(fp,"系统文件 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) fprintf(fp,"临时文件 "); if(wfd->dwFileAttributes & FILE_ATTRIBUTE_NORMAL) fprintf(fp,"默认 "); fprintf(fp,"\n");; fprintf(fp,"文件大小:%d字节\n",wfd->nFileSizeLow); } void FindInAll(LPCTSTR lpszPath) { TCHAR szFind[MAX_PATH]; lstrcpy(szFind, lpszPath); if (!IsRoot(szFind)) lstrcat(szFind, "\\"); lstrcat(szFind, FILEILTER); // 找所有文件 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); PrintFileDetail(&wfd); } // 对文件进行操作 } } while (FindNextFile(hFind, &wfd)); FindClose(hFind); // 关闭查找句柄 } int main(int argc, char* argv[]) { char findFile[64]={0},saveFile[64]={0}; puts("输入文件路径: (如 d:\\\\test)"); gets(findFile); puts("输入要保存结果的文件:(如 d:\\\\test.txt)"); gets(saveFile); fp=fopen(saveFile,"a+"); fprintf(fp,"目录%s 下的文件为:\n\n",findFile); FindInAll(findFile); printf("文件保存至%s.\n",saveFile); fclose(fp); getchar(); return 0; }
kkk12344552012-12-04 16:17:17