把一个目录下的全部.bmp和.jpg文件找到, 包含路径的文件名添加到一个文件列表(链表)中
./dir
|– 1.jpg
|– 2.bmp
head
–> .name ==“./dir/1.jpg”
–> .name ==“./dir/2.bmp”
求各位高手帮忙 小弟刚开始学者 木有头绪啊
./dir
|– 1.jpg
|– 2.bmp
head
–> .name ==“./dir/1.jpg”
–> .name ==“./dir/2.bmp”
求各位高手帮忙 小弟刚开始学者 木有头绪啊
解决方案
20
FILE* pf_path_file; // 搜索lp_path目录包括子目录全部文件名,保存到输出out_file_name int find_path_save_file(const char* lp_path , const char* out_file_name) { pf_path_file = fopen(out_file_name, "w"); int cnt = find_path(lp_path); fclose(pf_path_file); return cnt; } // 遍历搜索目录 int find_path(const char* lp_path) { static int cnt = 0; HANDLE hFile; // windows对文件的操作首先要得到一个文件句柄 FILETIME ft; SYSTEMTIME st; // 文件时间 和 系统时间 WIN32_FIND_DATAA wfd; // WIN32_FIND_DATAA 是windows定义的查找文件的结构 char sz_path[MAX_PATH] = {0}; char buf[MAX_PATH * 2 ] = {0}; strcpy(sz_path, lp_path); strcat(sz_path, "\*.*"); hFile = FindFirstFile(sz_path, &wfd); // FindFirstFile函数查找一个文件,sz_path是要查找的文件名,可以是全路径或相对路径,也可以写通配符,如“c:/*.*” if (hFile != INVALID_HANDLE_VALUE) { while (FindNextFile(hFile, &wfd)) { // 利用第一次找到的文件句柄,继续寻找下个文件,假如找到下个文件,则函数填充wfd结构,并返回true if (wfd.cFileName[0] == ".") continue; // . 当前目录 .. 上级目录符号 跳过去 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // 判断,得出找到的文件名能否是一个文件夹,假如是,则递归调用查找函数,由此实现深度全文件夹搜索 strcpy(sz_path, lp_path); strcat(sz_path, "\"); strcat(sz_path, wfd.cFileName); find_path(sz_path); // 调用递归查找 } else { ft = wfd.ftLastWriteTime; FileTimeToSystemTime(&ft, &st); sprintf(buf , "%d-%02d-%02d %02d:%02d %10u | ", st.wYear, st.wMonth, st.wDay, st.wHour + 8, st.wMinute , wfd.nFileSizeLow); // sprintf(buf + 32, "%s | %s", wfd.cFileName , lp_path); fprintf(pf_path_file , "%s\n" , buf); ++cnt; // 保存记录out_file_name , 返回保存的记录数 } } } return cnt; }
20
system(“dir /b /a-d c:\*.* >d:\allfiles.txt”);
//读文件d:\allfiles.txt的内容即C:\下全部文件的名字
system(“dir /b /a-d /s c:\*.* >d:\allfilesinsub.txt”);
//读文件d:\allfilesinsub.txt的内容即C:\下全部文件的名字包含子目录
system(“dir /b /ad c:\*.* >d:\alldirs.txt”);
//读文件d:\alldirs.txt的内容即C:\下全部子目录的名字
请记住,能用shell命令获取文件、文件夹信息或操作文件、文件夹最好用shell命令获取或操作,而不要用各种API获取或操作,原因是当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
假如嫌system黑窗口一闪,将system(“…”)替换为WinExec(“cmd /c …”,SW_HIDE);
//读文件d:\allfiles.txt的内容即C:\下全部文件的名字
system(“dir /b /a-d /s c:\*.* >d:\allfilesinsub.txt”);
//读文件d:\allfilesinsub.txt的内容即C:\下全部文件的名字包含子目录
system(“dir /b /ad c:\*.* >d:\alldirs.txt”);
//读文件d:\alldirs.txt的内容即C:\下全部子目录的名字
请记住,能用shell命令获取文件、文件夹信息或操作文件、文件夹最好用shell命令获取或操作,而不要用各种API获取或操作,原因是当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
假如嫌system黑窗口一闪,将system(“…”)替换为WinExec(“cmd /c …”,SW_HIDE);