c++如何批量修改文件后缀名

时间:2021-07-03 16:15:24


1、问题描述
在日常的应用中,很多时候会用到批量修改图片的后缀名。比如将1.bmp修改为1.jpg。或许我们用格式工厂或者批处理文件.bat课以轻而易举的做到。这里暂不讨论。本篇文章仅仅对如何用c++做图片批处理修改后缀名做一些说明。
2、c++程序
程序思路:先获取到文件夹下所有文件的名字,然后,用newname取代原来的oldname。

#include "stdafx.h"

#include <stdio.h>
#include <fstream>
#include <Windows.h>

#include <cstdio>
#include <iostream>
#include <string>
#include <io.h>
#include <vector>

#include <direct.h>
#include <stdlib.h>
#include <memory>

using namespace std;

void getFilesAll( string path, vector<string>& files)
{
//获取文件夹下面的所有文件名字
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
{
do {
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
{
getFilesAll( p.assign(path).append("\\").append(fileinfo.name) , files );
}
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}

void postfix()
{
char *filePath="G:\\image\\";
char strname[60];
vector<string> filesa;
getFilesAll(filePath ,filesa );
for(unsigned int i=0 ; i<filesa.size(); i++)
{
char newname[80]; //store the folder's name
char oldname[80];

strcpy(oldname, filesa[i].c_str());

cout<<filesa[i].c_str()<<endl;
//strcpy(newname, filesa[i].c_str());
sprintf(newname,"G:\\result\\%d.jpg",i);
//sprintf(newname,"%d.jpg",i);
rename(oldname,newname);
if (rename(oldname,newname))
{
cout<<"第"<<i<<"个文件名字从"<<filesa[i].c_str()<<"修改为"<<newname<<"成功"<<endl;
}
cout<<strname<<endl;
}
}
void main()
{
postfix();
system("pause");
}


3、效果图展示
(1)执行程序前状态如图1所示
c++如何批量修改文件后缀名

图1 执行程序前状态

(2)执行程序后状态如图2所示
c++如何批量修改文件后缀名

图2 执行程序后状态

(3) 程序执行结果如图3所示
c++如何批量修改文件后缀名
图3 程序执行结果


4、总结
这个写的一般,但是也算是勉强能解决问题。希望能够对别人有借鉴或者帮助。
5、参考文献
http://zhidao.baidu.com/link?url=YPNaKWx22B7eNydm-fZMCefpjFfO0cZum4v2EQPAhSImvKJhyzxjR87_IZ1k11u0P9c6TYux4hpBA5efkTPfsxBUNle74JlcdATsTok1KCy
6、祝愿
不忘初心,方得始终。2016年,各位朋友新年快乐!