c语言获取文件夹下的所有bmp,把一个目录下的全部.bmp和.jpg文件找到, 包含路径的文件名添加到一个文件列表(链表)中...

把一个目录下的全部.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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值