C语言遍历C盘所有.exe文件并将路径与文件名输出到TXT文件中出现问题

qq_23264809 2016-05-24 12:39:28
#define FILE_PATH "E:/demo.txt"
char *StrToUpper(char *str)
{
char *p = str;
while (*p)
{
if (*p >= 'a' && *p <= 'z')
{
*p -= 'a' - 'A';
}
p++;
}
return str;
}
char *GetExtension(char *file)
{
char *p = file;
while (*p)
{
p++;
}
while (*p != '.')
{
p--;
}
return p;
}
void GetFileBy_findnext(char *path, char *filter, char *extension)
{
FILE *fp; //文件指针
fp = fopen(FILE_PATH, "wt+");
// 判断文件是否能够正确创建/打开
if (fp == NULL) {
perror(FILE_PATH);
exit(1);
}
struct _finddata_t find_data;
long handle;
char buf[1000];
char search[1000];
char *p;
strcpy(buf, path);
p = buf;
while (*p)
{
p++;
}
p--;
if (*p != '\\')
{
strcat(buf, "\\");
}
strcpy(search, buf);
strcat(search, filter);
handle = _findfirst(search, &find_data);
if (handle == -1)
{
_findclose(handle);
return;
}
while (!_findnext(handle, &find_data))
{
if (strcmp(find_data.name, ".."))
{
if (find_data.attrib & _A_SUBDIR)
{
char buf1[1000];
char buf2[] = "Windows";
strcpy(buf1, find_data.name);
if (!strcmp(StrToUpper(buf1), StrToUpper(buf2)))
{
continue;
}
strcpy(buf1, buf);
strcat(buf1, find_data.name);
GetFileBy_findnext(buf1, filter, extension);
}
else
{
char buf1[100];
char buf2[100];
strcpy(buf1, GetExtension(find_data.name));
strcpy(buf2, GetExtension(extension));
if (!strcmp(StrToUpper(buf1), StrToUpper(buf2)))
{
fprintf(fp, "%s%s\n", buf, find_data.name);
printf("%s%s\n", buf, find_data.name);
//fflush(fp);
}
}
}
}
fclose(fp);
_findclose(handle);
}
int main()
{
GetFileBy_findnext("C:\\", "*.*", "*.exe");

}

程序可以将信息输出到控制台,就是printf可以用,但是fprintf用不了,文件中没有信息
...全文
1674 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_31538315 2016-08-19
  • 打赏
  • 举报
回复
强势围观看看
伊顺鸣 2016-06-07
  • 打赏
  • 举报
回复
oN5GrzoN 2016-06-06
  • 打赏
  • 举报
回复
fwrite试试
Atlanti 2016-06-02
  • 打赏
  • 举报
回复
一个这么简单的功能写了100行,我用python写不会超过20行
shiter 2016-05-30
  • 打赏
  • 举报
回复
我之前写过一个:http://blog.csdn.net/wangyaninglm/article/details/8668132
great_6 2016-05-29
  • 打赏
  • 举报
回复
如何写的正确答案
赵4老师 2016-05-25
  • 打赏
  • 举报
回复
写代码过滤fc命令的输出。
qq_23264809 2016-05-24
  • 打赏
  • 举报
回复
引用
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);
那能不能用shell比较两个TXT文件不同,并显示出不同的地方,这里的TXT文件都是逐行分析的,我用了windows下 fc 命令,但是有点不理想,把两个文件都显示出来了
赵4老师 2016-05-24
  • 打赏
  • 举报
回复
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);
小灸舞 版主 2016-05-24
  • 打赏
  • 举报
回复
会不会是权限不够?不能在C盘目录下写入文件,换个盘试试
或者单步调试检查每一步的变量值和各个返回值。
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2016-05-24
  • 打赏
  • 举报
回复
建议单步跟踪程序运行(特别是最后输出那一部分)以分析原因
qq_23264809 2016-05-24
  • 打赏
  • 举报
回复
就是调用系统的shell是吧,这实现了,然后还得从allfilesinsub.txt文件中逐行读取,计算文件MD5再保存进去,就还是要用到格式化输入输出函数了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧