把一个目录下的全部.bmp和.jpg文件找到, 包含路径的文件名添加到一个文件列表(链表)中

C语言 码拜 9年前 (2016-04-07) 2714次浏览
把一个目录下的全部.bmp和.jpg文件找到, 包含路径的文件名添加到一个文件列表(链表)中
./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);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明把一个目录下的全部.bmp和.jpg文件找到, 包含路径的文件名添加到一个文件列表(链表)中
喜欢 (1)
[1034331897@qq.com]
分享 (0)