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

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_29542611/article/details/88145016

介绍

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

BOOL WINAPI MoveFile(
  _In_ LPCTSTR lpExistingFileName,
  _In_ LPCTSTR lpNewFileName
);

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

// 根据filespec匹配 查找到指定文件(可能是多个),返回第一个匹配的句柄
intptr_t _findfirst(
   const char *filespec,
   struct _finddata_t *fileinfo // 传出参数
);
// 下一个匹配的文件
int _findnext(
   intptr_t handle,
   struct _finddata_t *fileinfo // 传出参数
);
// 关闭文件句柄
int _findclose( 
   intptr_t handle 
);

效果

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

代码

#include <Windows.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
#define MAX 256

int main() {
	
	struct _finddata_t file = {0};
	int fileHandle = 0, i = 0, len = 0;
	char filePath[MAX] = {0}, newName[MAX] = {0}, oldPath[MAX] = {0}, newPath[MAX] = {0};	
	char dir[MAX] = "F:\\Book\\AAA_Learn_Note\\新概念英语(第2册)美音(MP3+LRC)\\NCE2-美音-(MP3+LRC)\\";
	char prefix[MAX] = "002-";
	sprintf(filePath,"%s%s",dir,"*.*");
	
	fileHandle = _findfirst(filePath,&file); // 根据匹配规则找到指定类型的文件 
	if(fileHandle == -1) {
		printf("not find file\n");
		return 0;
	}
	
	do {
		len = strlen(file.name);
		if( len > 2) // 排除目录文件 
		{
			sprintf(newName,"%s%s",prefix,file.name);// 添加前缀 
			sprintf(oldPath,"%s%s",dir,file.name);
			sprintf(newPath,"%s%s",dir,newName);
//			printf("%s\n",oldPath);	
//			printf("%s\n",newPath);	
			MoveFile(oldPath,newPath); // 移动文件, 移动到当前文件实际上就是重命名,如果是拷贝就用CopyFile 
			
			i++;
		}
	} while( 0 == _findnext(fileHandle,&file) );
	_findclose(fileHandle);
	
	printf("move %d file success \n",i);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_29542611/article/details/88145016