写了个将目录下的所有大写文件名改为小写的程序,但是有点问题,大家帮忙看看?谢谢!

sharkoasis 2005-09-27 10:47:42
写了个将目录下的所有大写文件名改为小写的程序,但是有点问题,大家帮忙看看?谢谢!
程序如下:
#include <errno.h>
#include <dirent.h>
#include <stdio.h>
#include <unistd.h>
#include <ctype.h>

int main(void)
{
int length,i;
char *oldname=NULL,newname[256];
DIR *dir;
struct dirent *ent;

if(!(dir=opendir(".")))
{
perror("opendir is error");
return 1;
}

errno=0;
while((ent=readdir(dir)))
{
//puts(ent->d_name);
oldname=ent->d_name;
length=strlen(oldname);
//printf("%s\t%d\n",oldname,length);
for(i=0;i<length;i++,oldname++)
newname[i]=tolower(*oldname);

newname[length+1]='\0';
puts(newname);
//printf("%s\t%s\n",ent->d_name,newname);
// rename(ent->d_name,newname);

errno=0;
}

if(errno)
{
perror("readdir is error");
return 1;
}

closedir(dir);

return 0;
}

基本能转,但是有些转完后的文件名末尾有一些乱七八糟的字符
原目录内容:
rename sdfDd3.hTm SDFSD2.HTM sdfsd41.htm SDFSD5.HTM SDFSD76.HTM SDFSD8.HTM
rename.c SDFSD1.HTM SDFSD3.HTM SDFSD4.HTM SDFSD6.HTM SDFSD7.HTM SDFSD.HTM
转换后内容:
.
..
rename? -->error
sdfsd1.htm? --error
sdfsd.htmm -->error
sdfsd2.htm
sdfsd3.htm
sdfsd4.htm
sdfsd5.htm
sdfsd6.htm
rename.ct -->error
sdfsd7.htm
sdfsd8.htm
sdfsd76.htm
sdfsd41.htm
sdfdd3.htmm --->error

请问哪位大侠明白是怎么回事?谢谢!

...全文
149 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkoasis 2005-09-27
  • 打赏
  • 举报
回复
谢谢了,这么简单的问题我竟然没注意到,你说这个改名还有没有更好的方法啊?
zzhua 2005-09-27
  • 打赏
  • 举报
回复
//newname[length+1]='\0';
//改为
newname[length] = '\0';
//就好了.
zzhua 2005-09-27
  • 打赏
  • 举报
回复
c 里面就是这样写了,可以用shell编程(自己试吧 :)

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧