C/C++:C语言小程序—批量重命名文件

痛定思痛。 2022-03-12 02:47 315阅读 0赞

介绍

笔者有需求,需要将指定文件夹下的所有文件在原有名字的基础上进行重命名。 笔者查阅发现在windows API中有移动文件的API,将文件移动到当前文件就相当于重命名,故此可以使用该API。

  1. BOOL WINAPI MoveFile(
  2. _In_ LPCTSTR lpExistingFileName,
  3. _In_ LPCTSTR lpNewFileName
  4. );

这是对指定路径的某个文件进行移动,对所有文件进行移动,需要对文件进行遍历。笔者查阅后,可以使用下面3个函数实现文件的遍历操作。

  1. // 根据filespec匹配 查找到指定文件(可能是多个),返回第一个匹配的句柄
  2. intptr_t _findfirst(
  3. const char *filespec,
  4. struct _finddata_t *fileinfo // 传出参数
  5. );
  6. // 下一个匹配的文件
  7. int _findnext(
  8. intptr_t handle,
  9. struct _finddata_t *fileinfo // 传出参数
  10. );
  11. // 关闭文件句柄
  12. int _findclose(
  13. intptr_t handle
  14. );

效果

添加了指定前缀002-
在这里插入图片描述

代码

  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <io.h>
  4. #include <stdlib.h>
  5. #define MAX 256
  6. int main() {
  7. struct _finddata_t file = {0};
  8. int fileHandle = 0, i = 0, len = 0;
  9. char filePath[MAX] = {0}, newName[MAX] = {0}, oldPath[MAX] = {0}, newPath[MAX] = {0};
  10. char dir[MAX] = "F:\\Book\\AAA_Learn_Note\\新概念英语(第2册)美音(MP3+LRC)\\NCE2-美音-(MP3+LRC)\\";
  11. char prefix[MAX] = "002-";
  12. sprintf(filePath,"%s%s",dir,"*.*");
  13. fileHandle = _findfirst(filePath,&file); // 根据匹配规则找到指定类型的文件
  14. if(fileHandle == -1) {
  15. printf("not find file\n");
  16. return 0;
  17. }
  18. do {
  19. len = strlen(file.name);
  20. if( len > 2) // 排除目录文件
  21. {
  22. sprintf(newName,"%s%s",prefix,file.name);// 添加前缀
  23. sprintf(oldPath,"%s%s",dir,file.name);
  24. sprintf(newPath,"%s%s",dir,newName);
  25. // printf("%s\n",oldPath);
  26. // printf("%s\n",newPath);
  27. MoveFile(oldPath,newPath); // 移动文件, 移动到当前文件实际上就是重命名,如果是拷贝就用CopyFile
  28. i++;
  29. }
  30. } while( 0 == _findnext(fileHandle,&file) );
  31. _findclose(fileHandle);
  32. printf("move %d file success \n",i);
  33. return 0;
  34. }

发表评论

表情:
评论列表 (有 0 条评论,315人围观)

还没有评论,来说两句吧...

相关阅读

    相关 批量命名大量文件

    参考自《linux shell 脚本攻略(第2版)》 将一个文件夹下所有后缀为JPEG的文件重命名为后缀为jpg的文件,文件名不变。 当文件夹下的文件数量太多时,使用普通的

    相关 Python - 批量文件命名

      两个目标两个: 1. 输入一组文件名,进行批量重命名; 2. 输入一组目录名,批量重命名各个目录下的文件。 附加功能: 1. 可根据文件的创建日期对文件重新排序;