/************************************************************************/
/* Windows平台批量修改文件名 */
/* 如在一个文件夹中有大量文件且文件名有共同的字符串, */
/* 需要把这个字符串替换成别的字符串 */
/* 主要思想:遍历文件夹中的所有文件,并到每个文件改名 */
/************************************************************************/
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <windows.h>
using namespace std;
void FindFileWin(char * pFilePath, char *oldstr, char *newstr);
void ReplaceFileName(char *file_name, char *oldstr, char *newstr);
int main(int argc, char *argv[])
{
if (argc < 4)
{
printf("usage: modify_file_name.exe dir_path, oldstr, newstr\n");
printf("dir_path: 文件所在的目录\noldstr: 文件名中需要修改的字符串\n");
printf("newstr: 文件名中修改成为的字符串\n如: modify_file_name.exe f:\\back_map bjlfs bjl9\n");
return -1;
}
FindFileWin(argv[1], argv[2], argv[3]);
return 1;
}
/*************************************************
* 函数名:FindFile()
* 输入参数:pFilePath(路径)
* 输出参数:无
* 功能:根据输入的目录得到该目录下所有的文件
*************************************************/
void FindFileWin(char * pFilePath, char *oldstr, char *newstr)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH + 1];// 指定路径
DWORD dwError;
char file_name[1024];
strncpy (DirSpec, pFilePath, strlen(pFilePath) + 1);
strncat (DirSpec, "\\*", 3);
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid file handle. Error is %u ", GetLastError());
return ;
}
else
{
if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY )
{
memset(file_name, 0, 1024);
strcat(file_name, pFilePath);
strncat(file_name, "\\", 2);
strcat(file_name, FindFileData.cFileName);
printf ("%s \n", file_name); //找到文件,完整的文件路径名
// 添加对文件进行处理的代码
ReplaceFileName(file_name, oldstr, newstr);
}
else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
&& strcmp(FindFileData.cFileName, ".") != 0
&& strcmp(FindFileData.cFileName, "..") != 0)
{ //找到目录
char Dir[MAX_PATH + 1];
strcpy(Dir, pFilePath);
strncat(Dir, "\\", 2);
strcat(Dir, FindFileData.cFileName);
FindFileWin(Dir, oldstr, newstr);
}
while (FindNextFile(hFind, &FindFileData) != 0)
{
if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
{
memset(file_name, 0, 1024);
strcat(file_name, pFilePath);
strncat(file_name, "\\", 2);
strcat(file_name, FindFileData.cFileName);
printf ("%s \n", file_name); //找到文件,完整的文件路径名
// 添加对文件进行处理的代码
ReplaceFileName(file_name, oldstr, newstr);
}
else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY
&& strcmp(FindFileData.cFileName, ".") != 0
&& strcmp(FindFileData.cFileName, "..") != 0)
{ //找到目录
char Dir[MAX_PATH + 1];
strcpy(Dir, pFilePath);
strncat(Dir, "\\", 2);
strcat(Dir, FindFileData.cFileName);
FindFileWin(Dir, oldstr, newstr);
}
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES)
{
printf ("FindNextFile error. Error is %u ", dwError);
return;
}
}
}
/************************************************************/
/* 修改文件的名字 */
/* 输入参数:char *file_name ,文件名 */
/* 输入参数:char *oldstr, 文件名中需要修改的字条串 */
/* 输入参数:char *oldstr, 文件名中需要修改成为的字条串 */
/************************************************************/
void ReplaceFileName(char *file_name, char *oldstr, char *newstr)
{
string souce = string(file_name);
size_t pos = souce.find(oldstr, 0);
while(pos != string::npos)
{
souce.replace(pos, strlen(oldstr), newstr);
pos = souce.find(oldstr, pos + 1);
}
MoveFile(file_name, souce.c_str());
}
Windows平台下用C++批量修改文件名
5星 · 超过95%的资源 需积分: 50 32 浏览量
2011-07-19
17:29:39
上传
评论
收藏 12KB RAR 举报
alive232
- 粉丝: 1
- 资源: 9
最新资源
- apk.tw_LineLite_v8a_v.2.17.1_sign.apk
- Elasticsearch实战:构建高效搜索系统的秘诀.zip
- HTML+CSS+JS网页设计:从入门到精通.zip
- 数据库课程设计:从理论到实践的全面指南.zip
- Python闭包:深入理解与应用场景解析.zip
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页