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


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所示
图1:程序执行前状态

图1 执行程序前状态

(2)执行程序后状态如图2所示
图2:程序执行后状态

图2 执行程序后状态

(3) 程序执行结果如图3所示
图3:程序执行结果展示
图3 程序执行结果


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ACMSunny

赠人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值