admin 管理员组文章数量: 1184232
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.打开了目录之后就要开始读取当前文件的目录:
structdirent*ptr =readdir(dir);//读取当前所有文件目录,循环一次会自动读取下一个文件名 4.之后需要做的就是将得到的文件名的后缀类型改为我们需要的文件格式,这里需要做的其实就是处理得到的文件名字符串,将其后缀替换成我们的目标格式。
5.调用rename函数将原文件名修改为目标的文件名
rename(ptr->d_name, dist_ptr);//将ptr->d_name文件名修改为dist_ptr6.最后关闭当前的文件目录:
closedir(dir);//关闭当前目录3.核心代码
其中用到的完整工程获取方法见文末,在此贴出核心代码供大家学习:
intmain(void){
DIR * dir;structdirent*ptr =(structdirent*)malloc(sizeof(structdirent));memset(ptr,0,sizeof(structdirent));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("打开文件失败");return0;}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(structdirent));//清除数据}closedir(dir);//关闭当前目录free(ptr);free(dist_ptr);return1;}4.运行流程
1.将用源码生成的可执行文件(.exe)复制到所需进行批量修改文件类型的目录下;
5.完整工程及可执行文件的获取
支持笔者欢迎获取源码工程:
1.下载我的资源:
2.关注公众号“
脑补空间
”,发送“
文件类型修改源码
”获取~
版权声明:本文标题:成为文件转换高手:用C语言改变你的SWF为Adobe Flash 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1771710661a3547686.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论