1.前言
这些天接触了用C语言打开以及读取文件内容后,突然想到是否可以用C语言更改文件类型(越学越发散了,本来想着专搞嵌入式方面的),愈发的觉得咱C语言还是挺强大的哈。首先的需要知道就是C库有没有类似读取文件的这种函数来读取文件名,要自己写的话那可真太复杂了,到网上搜了下,幸好,还真有:
DIR * opendir(const char * name);
【函数说明】opendir()用来打开参数name 指定的目录, 并返回DIR形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值.
【返回值】成功则返回DIR 型态的目录流, 打开失败则返回NULL.
struct dirent * readdir(DIR * dir);
【函数说明】返回参数dir 目录流的下个目录进入点
【返回值】成功则返回下个目录进入点. 有错误发生或读取到目录文件尾则返回NULL.
【头文件】#include <dirent.h>
int rename(char * oldname, char * newname);
【函数功能】用于重命名文件、改变文件路径或更改目录名称;
【参数】oldname为旧文件名,newname为新文件名。
【返回值】修改文件名成功则返回0,否则返回-1。
【头文件】#include <stdio.h>
(以上引用参考自C语言中文网)
2.实现思路
1.首先需要知道我们期望的效果是什么:我们生成的可执行文件.exe放在需要批量进行文件的目录下,就可以实现更改文件类型的后缀。最开始想的是固定将某种文件格式改为另外一种文件格式,这样用户操作的时候只需点击.exe文件就可以,但是后来觉得这种适用性太小了,所以改为通过输入转化的源文件格式以及转化成目标文件的格式的方式来适应更多的类型修改,只是说操作稍微多了一点。
2.明白了我们需要达到的效果,那就开始写程序了,和读取文本文件一样,首先需要打开所在的目录:
DIR *dir = opendir("./"); //打开当前所有文件目录
3.打开了目录之后就要开始读取当前文件的目录:
struct dirent *ptr = readdir(dir); //读取当前所有文件目录,循环一次会自动读取下一个文件名
4.之后需要做的就是将得到的文件名的后缀类型改为我们需要的文件格式,这里需要做的其实就是处理得到的文件名字符串,将其后缀替换成我们的目标格式。
5.调用rename函数将原文件名修改为目标的文件名
rename(ptr->d_name, dist_ptr); //将ptr->d_name文件名修改为dist_ptr
6.最后关闭当前的文件目录:
closedir(dir); //关闭当前目录
3.核心代码
其中用到的完整工程获取方法见文末,在此贴出核心代码供大家学习:
int main(void)
{
DIR * dir;
struct dirent *ptr = (struct dirent *)malloc(sizeof(struct dirent));
memset(ptr, 0, sizeof(struct dirent));
char *dist_ptr = (char *)malloc(FILE_NAME_LEN_MAX);
memset(dist_ptr, 0, FILE_NAME_LEN_MAX);
printf("请输入需要转化的源文件格式:(回车键结束) ");
gets(srcType);
printf("请输入转化成目标文件的格式:(回车键结束) ");
gets(distType);
dir = opendir("./"); //打开当前所有文件目录
if(dir == NULL) {
printf("打开文件失败");
return 0;
}
while(ptr = readdir(dir)) //读取当前所有文件目录,循环一次会自动读取下一个文件名
{
if(FileTypeReplace(ptr->d_name, dist_ptr, srcType, distType)) {//将源文件类型替换为目标文件类型
printf("ptr->d_name: %s\n", ptr->d_name);
printf("dist_ptr->d_name: %s\n", dist_ptr);
rename(ptr->d_name, dist_ptr); //将ptr->d_name文件名修改为dist_ptr
}
memset(dist_ptr, 0, FILE_NAME_LEN_MAX); //清除数据
memset(ptr, 0, sizeof(struct dirent)); //清除数据
}
closedir(dir); //关闭当前目录
free(ptr);
free(dist_ptr);
return 1;
}
4.运行流程
1.将用源码生成的可执行文件(.exe)复制到所需进行批量修改文件类型的目录下;
2.运行可执行文件.exe,按照提示输入“需要转化的源文件格式”以及“转化成目标文件的格式”,输入完成后都以回车键结束~
3.之后原文件的类型就全部修改为我们需要的类型啦~
5.完整工程及可执行文件的获取
支持笔者欢迎获取源码工程:
1.下载我的资源:https://download.csdn.net/download/weixin_46582567/85403168
2.关注公众号“脑补空间”,发送“文件类型修改源码”获取~