希望大佬可以指导一下。如何加入一个文件的查重,和删除条件
以下是我编的程序,目前我是想在以下程序加入一个功能,实现文件的查重,和删除(举个例子,2个或多个文件是一样的,改动了名字使他们名字不相同,但是实际同样的文件,加入这个功能后能删除这些文件)
(下面这个程序有遍历文件路径下所有文件的功能,没有查重,和删除希望大佬能帮忙解答)
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <Windows.h>
#include <time.h>
void DoSearchFiles(char *path,FILE *fp)
{
time_t t;
struct tm *p;
char a={0};
char temp={0};
strcat(temp,path);
strcat(temp,"*.*");
_finddata_tfileinfo;
long handle=_findfirst(temp,&fileinfo);
if(handle==-1)
{
return;
}
while(!_findnext(handle,& fileinfo))
{
if(fileinfo.attrib== _A_SUBDIR){
if (strcmp(fileinfo.name,".")==0||strcmp(fileinfo.name,"..")==0)
{
continue;
}
t=fileinfo.time_create;
p=localtime(&t);
strftime(a, sizeof(a), "创建时间:%Y-%m-%d %H:%M:%S", p);
//printf("%d: %s\n", (int)t, s);
printf("%s%s %s\n",path,fileinfo.name,a);
fprintf(fp,"%s%s %s\n",path,fileinfo.name,a);
char temp={0};
strcat(temp,path);
strcat(temp,fileinfo.name);
strcat(temp,"\\");
DoSearchFiles(temp,fp);
}
else
{
t=fileinfo.time_create;
p=localtime(&t);
strftime(a, sizeof(a), "创建时间:%Y-%m-%d %H:%M:%S", p);
printf("%s%s %s\n",path,fileinfo.name,a);
fprintf(fp,"%s%s %s\n",path,fileinfo.name,a);
}
}
_findclose(handle);
}
int main()
{
FILE *fp;
if((fp=fopen("D:\\123\\a\\110.txt","w"))==NULL)
{
printf("文件夹打开失败!\n");
exit(EXIT_FAILURE);
}
int i=0;
char c;
char path={0};
printf("请输入路径:");
while((c=getchar())!='\n')
{
path=c;
i++;
if(i==100)
{
printf("输入的文件路径超出范围!");
return -1;
}
}
DoSearchFiles(path,fp);
fclose(fp);
system("pause");
return 0;
} {:10_266:}急!!!在线等!!! 1. 学会在 c++ 中计算文件的 md5(可以参考 https://stackoverflow.com/questions/1220046/how-to-get-the-md5-hash-of-a-file-in-c)
2. 学会在 c++ 中获取文件的大小
3. 学会在 c++ 中使用 hashmap(这个好像是红黑树,可以参考 https://stackoverflow.com/questions/3578083/what-is-the-best-way-to-use-a-hashmap-in-c)
实现步骤
1. 遍历文件夹
2. 对于每一个文件,计算 md5,读取文件大小 file_size
3. 使用 sprintf(buf, "%s_%d", md5, file_size) 作为 map 的key,value 是文件路径
页:
[1]