最近在做序列帧动画时,序列帧的名称中带有格式符,在Kanzi中,通过属性绑定图片到资源时,因为Kanzi不支持格式符,所以需要删除序列帧中的格式符。一套序列帧有上百张图片,一个一个修改未免太浪费时间了,就想着写个程序来批量修改。

我在上一篇写过如何去修改指定路径下的一个文件名,那么该如何批量修改文件呢?

对于文件的批量修改,需要引用存储文各种信息的结构体 _finddata_t,使用这个结构体需要引入头文件<io.h>,源码如下:

struct _finddata_t{unsigned attrib;        //文件的属性time_t time_create;     //文件的创建时间time_t time_access;     //最后一次被访问的时间time_t time_write;      //最后一次修改的时间_fsize_t size;          //文件大小char name[_MAX_FNAME];  //文件名称};

那么如何通过这个结构体将文件信息存储到结构体的内存空间呢?需要借助_findfirst、_findnext和_findclose这三个函数,下面就介绍以下这三个函数

long _findfirst( char *filespec, struct _finddata_t *fileinfo );

参数

filespec:标明文件的字符串,支持通配符

fileinfo:存储文件的各种信息的结构体指针,找到文件后,将文件信息存储到该指针中

返回值

返回一个long型的唯一的句柄,若查找失败,返回-1

int _findnext( long handle, struct _finddata_t *fileinfo );

参数

handle:由_findfirst函数返回的句柄

fileinfo:存储文件的各种信息的结构体指针,找到文件后,将文件信息存储到该指针中

返回值

查找成功返回0,失败返回-1

int _findclose( long handle );

参数

handle:由_findfirst函数返回的句柄

查找的逻辑是:通过_findfirst函数查找第一个文件,查找成功后,返回句柄,使用句柄调用_findnext函数继续查找其他文件,当所有文件都查找完后,调用_findclose函数来结束查找。

如图所示,在Image文件夹下有55张png图片,现在我想把图片的文件名称前面的0去掉,具体操作见代码:

代码段 

#include <iostream>
#include <io.h>
#include <map>
#define MAX_NAME 100int main()
{long Handle;//const char* FilePath = "E://test//FileRename//Image//*.png";const char* FilePath = "../Image/*.png";    //图片所在路径struct _finddata_t FileInfo;Handle = _findfirst(FilePath, &FileInfo);if (-1 == Handle){std::cout << "Find File Failed!" << std::endl;return 0;}//因为rename函数在重命名时,传的参数需要指定文件路径,所以需要对新旧文件名称追加路径std::string imagePath = "../Image/";std::string oldName = imagePath + FileInfo.name;//文件名称按照顺序从0还是递增int ImageIndex = 0;const char* Prefix = "../Image/nor_m83_wind speed_%d.png";char newName[MAX_NAME] = {0};snprintf(newName, sizeof(newName), Prefix, ImageIndex);std::map < std::string, std::string > mapRename;mapRename.insert(std::pair < std::string, std::string >(oldName, newName));while (0 == _findnext(Handle, &FileInfo)){oldName = imagePath + FileInfo.name;++ImageIndex;snprintf(newName, sizeof(newName), Prefix, ImageIndex);mapRename.insert(std::pair < std::string, std::string >(oldName, newName) );}for (auto iter = mapRename.begin(); iter != mapRename.end(); ++iter){std::cout << "oldName is " << iter->first.c_str() << std::endl;std::cout << "newName is " << iter->second.c_str() << std::endl;rename(iter->first.c_str(), iter->second.c_str());}_findclose(Handle);//map使用后需要释放,通过swap结合clearstd::map < std::string, std::string > emptyMap;mapRename.swap(emptyMap);emptyMap.clear();system("Pause");return 0;
}

运行结果

从终端上看,图片前的0都去掉了,再来看看文件夹下的图片名称:

同样的,Image文件夹下的所有图片名称前的0,也给删掉了,成功!

文件操作——批量修改文件名相关推荐

  1. hutool 读取扩展名文件_批量修改文件名,一键就可以

    家在学习.工作的过程中有没有遇到过这种情况?给一堆文件按照一定的规则命名,比如在每个文件添加负责人的名字,给文件的名字添加序号.通常的操作都是选中那个文件然后重命名.文件数量少还好,如果数量多了便感觉 ...

  2. 每天一个实用小技巧!归纳多个文件、批量修改文件名

    归纳多个文件. 选中要归类的文件或者文件夹, 在其中一个上面单击右键,选择第一个选项: 批量修改文件名 选择需要修改的文件,在其中一个上面单击右键: 根据自己的需要修改: 修改后的文件名:

  3. officeaid.addin 系统找不到指定的文件_批量修改文件名方法

    1.这是要改的文件名,首先要将文件名复制出来,选中文件名→点击[主页]→点击[复制路径],如原文件名1.1所示: 原文件名1.1 2.然后在Excel表格中粘贴,使用表格的[分列]功能(粘贴出来的是该 ...

  4. os,shutil操作——批量修改文件名,移动文件,读取文件

    有一批混乱的标签数据: 内容为:(最后一列为标签) 按标签将这批数据重命名并另存到对应标签下的目录. ''' 将存放所有数据标签的txt文本,按照标签类别存放至新的文件夹路径.并以新的格式命名. 例如 ...

  5. 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。

    在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序. import os path=input('请输入文件路径(结尾加上/):') #获取该 ...

  6. python批量读取dat文件_python编写Windows环境下批量修改文件名

    在日常编程工作中我们经常需要对文件进行操作,而文件一般都是由文件名和扩展名组成的.比如我们经常需要把.dat 格式 转化成 .txt格式,把png改成jgp格式等等.这里我们就教大家如何利用PYTHO ...

  7. 批量修改文件名中的一部分,操作步骤

    如何批量修改文件名中的一部分?在工作中我们经常需要对文件做各种操作,其中有一种是批量重命名,顾名思义,批量重命名就是一次性对大量文件修改名称的意思,批量修改文件名可以帮助我们节省大量的时间,否则一个一 ...

  8. 【教程】几秒钟批量处理文件夹内文件名中相同的部分名字的相同部分去掉或替换掉,如何批量修改文件名?

    看到好多人问如何批量修改文件名,主要问题包括以下类型: 1.在一个文件夹内或者子文件夹内,文件名中相同的部分名字统一删掉 2.在一个文件夹内或者子文件夹,有很多文件名种有关键字要替换成某个文字 3.如 ...

  9. 把汇集多个json文件的txt进行分割,然后批量修改文件名后缀

    数据类型,假设一个txt文件中有很多这样的数据: {"platform":"linux","kq_id":5,"device_id ...

最新文章

  1. embed的名词_常见名词解释
  2. vi和vim的基础使用
  3. 发达国家农业模式-国际农民丰收节贸易会:全球农业未来
  4. Ubuntu 15.04 安装TensorFlow(源码编译) 及测试梵高作画
  5. pstate0 vid数值意义_天体运动的简单数值计算
  6. NBU计算机专业期末考试记录
  7. unique() 去重函数
  8. 将p12证书导入java
  9. 服务器虚拟化三种架构,X86虚拟化之三种服务器虚拟化战略架构
  10. spss-多元线性回归分析
  11. MySql实验嵌套查询_MySQL数据库实验四:嵌套查询
  12. ubuntu磁盘分区方案
  13. 【 Iptables 】
  14. 快速提升网站排名的方法
  15. ACE-NODE: Attentive Co-Evolving Neural Ordinary DifferentialEquations(KDD 2021)
  16. PyCharm配置解释器
  17. swf反编译/swf decompiler/flash decompiler软件ASV2011截图
  18. 退化分布的特征函数及期望与方差 - 随机过程
  19. c4d中的语言菜单,C4D的菜单(选择)
  20. 新建SVN仓库:svnadmin create

热门文章

  1. 1393:联络员(liaison)
  2. html插入自动循环背景音乐,HTML插入背景音乐方法【全】
  3. AutoCAD自学在线视频教程图文教程
  4. 金蝶k3库存账龄分析报表(带参数)
  5. SEO 网络推广108式助你流量猛增
  6. 20230318英语学习
  7. matlab数字图像处理之局部直方图均衡化
  8. linux中人脸识别不了,linux 人脸识别
  9. 牢记昨天的教训_请牢记5条安全的编码准则
  10. 初次组装台式机-618自营-装机配置单-3000价位中上普通家用型主机