dydhyh 发表于 2016-12-7 10:41

C++批量修改文件名, 大佬勿喷

某天在给一大堆文件改名字的时候, 突发奇想能否自动重命名。
代码是C,C++混合的. 没有界面, 通过配置文件来配置的。
核心思想是, 利用 _finddata_t 这个结构体及两个对应的函数来枚举指定目录下的所有指定后缀的文件。
然后自动编号将其重命名.
核心代码:
/**
* 枚举文件夹下所有文件并将之重命名
* @param char* rootDir 文件目录
* @param char* searchName 通配符
* @param char* extName 文件后缀
* @param int cntFileNo 当前编号
*/
int setFileNameBySearch(char* rootDir, char* searchName, char* extName, int cntFileNo)
{
        // 文件句柄
        long file_handle;
        // 文件信息结构体
        struct _finddata_t fileinfo;
        file_handle = _findfirst(searchName, &fileinfo);
        if(file_handle == -1) return cntFileNo;
        char file_tmp_name = "";
        char file_cnt_name = "";
        strcpy(file_tmp_name, rootDir);
        strcpy(file_cnt_name, rootDir);
        strcat(file_cnt_name, fileinfo.name);

        int tmp = cntFileNo, j;
        char tmp_pic = "";
        if(tmp >= 10)
        {
                int tmp_len = 0;
                while(tmp)
                {
                        tmp_pic = (tmp % 10 + '0');
                        tmp /= 10;
                }
                for(j = 0; j <= (tmp_len - 1) / 2; j ++)
                {
                        char tmp_ch = tmp_pic;
                        tmp_pic = tmp_pic;
                        tmp_pic = tmp_ch;
                }
        }
        else
                tmp_pic = tmp + '0';
        // 拼接文件名
        strcat(tmp_pic, extName);
        strcat(file_tmp_name, tmp_pic);
       
        // 复制文件
        rename(file_cnt_name, file_tmp_name);
        cntFileNo += 1;

        while(!_findnext(file_handle, &fileinfo))
        {
                tmp =cntFileNo;
                memset(tmp_pic, 0, sizeof(tmp_pic));

                memset(file_tmp_name, 0, sizeof(file_tmp_name));
                memset(file_cnt_name, 0, sizeof(file_cnt_name));
                strcpy(file_tmp_name, rootDir);
                strcpy(file_cnt_name, rootDir);
                strcat(file_cnt_name, fileinfo.name);

                if(tmp >= 10)
                {
                        int tmp_len = 0;
                        while(tmp)
                        {
                                tmp_pic = (tmp % 10 + '0');
                                tmp /= 10;
                        }
                        for(j = 0; j <= (tmp_len - 1) / 2; j ++)
                        {
                                char tmp_ch = tmp_pic;
                                tmp_pic = tmp_pic;
                                tmp_pic = tmp_ch;
                        }
                }
                else
                        tmp_pic = tmp + '0';

                // 拼接文件名
                strcat(tmp_pic, extName);
                strcat(file_tmp_name, tmp_pic);

                // 复制文件
                rename(file_cnt_name, file_tmp_name);
                cntFileNo += 1;
        }
       
        _findclose(file_handle);
        return cntFileNo;
}

写的不好还请大佬们轻喷, 可以自己定制重命名的文件名规则。
虽然功能不是很强大, 甚至有点鸡肋,但是都是在学习中成长么不是:lol

dydhyh 发表于 2016-12-7 14:38

首席鉴淫师 发表于 2016-12-7 12:23
用批处理的化也可以啊

之前也用过, 但是想用C写一个, 感觉这样比批处理会更好一点, 也方便一点点^_^
批处理不是很会抱歉~

dydhyh 发表于 2016-12-7 14:39

GreyChroma 发表于 2016-12-7 12:28
恩,不错,这个好多了,谢谢楼主贡献,用心讨论,共获提升

^_^ 谢谢

Henrie 发表于 2016-12-7 10:53

感谢楼主分享。

dxdeng 发表于 2016-12-7 11:28

可以做一个小程序了

啊哈啊 发表于 2016-12-7 11:43

不错的工具。

神座.出流 发表于 2016-12-7 11:56

感谢分享

HYY359818976 发表于 2016-12-7 12:14

感谢分享.................

首席鉴淫师 发表于 2016-12-7 12:23

用批处理的化也可以啊

GreyChroma 发表于 2016-12-7 12:28

恩,不错,这个好多了,谢谢楼主贡献,用心讨论,共获提升

嗨独往 发表于 2016-12-7 12:53

看不懂。。。

cwy121 发表于 2016-12-7 13:44

老鸟都是这么过来的,哈哈
页: [1] 2
查看完整版本: C++批量修改文件名, 大佬勿喷