小无余 发表于 2020-7-22 11:06:51

希望大佬可以指导一下。如何加入一个文件的查重,和删除条件

以下是我编的程序,目前我是想在以下程序加入一个功能,实现文件的查重,和删除
(举个例子,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;
}

小无余 发表于 2020-7-22 16:49:33

{:10_266:}急!!!在线等!!!

赚小钱 发表于 2020-7-23 13:12:32

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]
查看完整版本: 希望大佬可以指导一下。如何加入一个文件的查重,和删除条件