用C语言编程修改文件名(C++也行)

在当前文件夹下,修改该文件夹下的某类文件如txt,jpg,mp3等的文件名文件名还是有用的不是该掉就算了,需要具体的实现... 在当前文件夹下,修改该文件夹下的某类文件
如txt,jpg,mp3等的文件名
文件名还是有用的
不是该掉就算了,需要具体的实现
展开
 我来答
吉祥二进制
高粉答主

推荐于2017-09-08 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84565

向TA提问 私信TA
展开全部

修改文件名,可要调用操作系统提供的API函数,比如Windows上的MoveFile(),也可以直接调用cmd中已提供的重命名命令——rename。下面的示例代码,调用rename命令来重名命文件名。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int ac, char *pav[])
{
if (ac!=3) {
printf("程序名 要重命名的文件路径 新的文件名\n");
printf("示例:test.exe 1.txt 2.txt\n");
return 0;
}
if (access(pav[1], 0) !=0) {
printf("不存在该文件\n");
return 0;
}
char szcmd[256] = "cmd /c rename ";
strcat(szcmd, pav[1] );
strcat(szcmd, " ");
strcat(szcmd, pav[2]);
system(szcmd);
return 0;
}

L_o_o_n_i_e
2008-02-19 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5087万
展开全部
麻烦在文件名允许有空白和一些与C语言有冲突的特殊符号。
如果没有上述情况可以这样写:
(1)通过位置参数传入 老扩展名 和 新扩展名
void main(int argc, char *argv[]){}
命令行: my_rename.exe jpeg jpg
程序名在 argv[0]里,"jpeg" 在 argv[1]里,jpg 在 argv[2]里了
l2 = strlen(argv[1]); // 老扩展名长度
(2) 通过
char command[120],namelist[]="all.lis";
sprintf(command,"DIR/B/A-D/OD *.%s > %s", argv[1],namelist);
system(command);
取得所有要换名的文件名字列表,存放在all.lis文件里,一个文件名一行。
(3)打开 all.lis 文件,
FILE *flist;
if ( (flist = fopen(namelist,"r") ) == NULL ) {
printf("\007Cann't open work file: %s ", namelist);exit(1);
};
一行一行读入:
char current_file_name[64],new_name[64];
while ( fgets( current_file_name, 64, flist) !=NULL ) { 处理};
(4)while 循环 处理:
strcpy(new_name,current_file_name);
l = strlen(new_name); // 文件名全长
strncpy(&new_name[0]+(l-l2),"\0",1); // 文件基本名,含点号,不含扩展名
strcat(new_name,argv[2]); // 新文件名
sprintf(command,"REN %s %s",current_file_name,new_name); // 换名命令
system(command); // 执行换名

完整程序:
#include <stdio.h>
#include <stdlib.h>
FILE *flist;
void main(int argc,char * argv[])
{
int l,l2;
char command[240],namelist[]="all.lis";
char current_file_name[64],new_name[64];

if(argc < 3) {printf("\007Usage: %s old_ext new_ext\n",argv[0]);
printf("For example: %s jpeg jpg\n",argv[0]);
exit(0);
}

l2 = strlen(argv[1]);

sprintf(command,"DIR/B/A-D/OD *.%s > %s", argv[1],namelist);
system(command);
if ( (flist = fopen(namelist,"r") ) == NULL ) {
printf("\007Cann't open work file: %s ", namelist);exit(1);
};

while ( fgets( current_file_name, 64, flist) !=NULL ) {
strcpy(new_name,current_file_name);
l = strlen(new_name);
strncpy(&new_name[0]+(l-l2-1),"\0",1);
strcat(new_name,argv[2]);
strncpy(¤t_file_name[0]+l-1,"\0",1);
sprintf(command,"REN %s %s", current_file_name, new_name);
system(command);
};
fclose(flist);
exit(0);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
keefo
推荐于2017-10-01 · TA获得超过517个赞
知道小有建树答主
回答量:355
采纳率:0%
帮助的人:522万
展开全部
#include"stdio.h"
#include"io.h"
#include"string.h"
#include"stdlib.h"
#define MAX 128

int main()
{
char oldname[MAX],newname[MAX],cmd[MAX];
struct _finddata_t files;
int File_Handle;
int i=0;

File_Handle = _findfirst("c:\\temp\\*.txt",&files);
if(File_Handle==-1)
{
printf("error\n");
return 0;
}
do
{
strcpy(oldname,files.name);
sprintf(newname,"new_%s",oldname);
sprintf(cmd,"rename c:\\temp\\%s %s",oldname,newname);
printf("%s\n",cmd);
system(cmd);
//现在文件名已经改为 “new_旧的文件名”
//这里使用 oldname 进行你需要的处理
i++;
}while(0==_findnext(File_Handle,&files));
_findclose(File_Handle);
printf("Find %d files\n",i);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gis19831203
2008-02-18 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:827万
展开全部
用这个函数:详细信息看MSDN
rename(const char* oldname, const char* newname);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式