鱼C论坛

 找回密码
 立即注册
查看: 1035|回复: 2

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

[复制链接]
发表于 2020-7-22 11:06:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是我编的程序,目前我是想在以下程序加入一个功能,实现文件的查重,和删除
(举个例子,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[100]={0};
        char temp[MAX_PATH]={0};
        strcat(temp,path);
        strcat(temp,"*.*");
        _finddata_t  fileinfo;
       
        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[MAX_PATH]={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[100]={0};
                printf("请输入路径:");
               
                while((c=getchar())!='\n')
                {
                        
                 path[i]=c;
                 i++;
                 if(i==100)
                 {
                        printf("输入的文件路径超出范围!");
                        return -1;
                 }
                }
               
               
                DoSearchFiles(path,fp);
                fclose(fp);
                system("pause");
               

               

                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-22 16:49:33 | 显示全部楼层
急!!!在线等!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 13:12:32 | 显示全部楼层
1. 学会在 c++ 中计算文件的 md5(可以参考 https://stackoverflow.com/questi ... hash-of-a-file-in-c)
2. 学会在 c++ 中获取文件的大小
3. 学会在 c++ 中使用 hashmap(这个好像是红黑树,可以参考 https://stackoverflow.com/questi ... -use-a-hashmap-in-c)

实现步骤

1. 遍历文件夹
2. 对于每一个文件,计算 md5,读取文件大小 file_size
3. 使用 sprintf(buf, "%s_%d", md5, file_size) 作为 map 的key,value 是文件路径
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表