c/C++文件改名程序

来源:百度知道 编辑:UC知道 时间:2024/07/05 05:09:15
首先在unix下用命令ls –l>flist.out,生成文件flist.out如:
/public/tss/dev2/src/ls -l
total 512
-rw-r----- 1 tss2 staff 379 Jun 27 2006 DCCalcStat.pc
-rw-r----- 1 tss2 staff 4079 Jun 27 2006 DCCalcStatBase.pc
-rw-rw-rw- 1 tss2 staff 238 Mar 12 15:39 ULOG.031207
-rw-rw-rw- 1 tss2 staff 238 Mar 20 19:53 ULOG.032007
-rw-r----- 1 tss2 staff 316 Jun 27 2006 ULOG.060106

写一个程序把文件flist.out变成
DCCalcStat.pc#379
DCCalcStatBase.pc#4079
ULOG.031207#238
ULOG.032007#238
ULOG.060106#316

则每行格式是file_name#file_length

在unix shell里执行这个命令即可
awk '{ if($1 != "total") print $9 " # " $5 }' file.out | cat > file.out
或:
ls -l | awk '{ if($1 != "total") print $9 " # " $5 }' > file.out

不用编程

如果是在要写程序:
void modify()
{
FILE* fp;
char len[16];
char name[128];
if ((fp = fopen("file.out", "r")) == NULL)
{
fprintf(stderr, "fopen error\n");
return;
}
fscanf(fp, "%s %s\n", len, name);
while (!feof(fp))
{
fscanf(fp, "%s %s %s %s %s %s %s %s %s\n", name, name, name, name, len, name, name, name, name);
printf("%s # %s\n", name, len);
}
fclose(fp);
}

执行时用管道输出到另外一个进程如cat在重定向输出到file.out,如:
./foo | cat > file.out
因为foo进程里以读的形式打开了file.out的文件,如果直接将stdout重定向到file.out,会出错,所以用管道输出到另外一个进程,以关闭foo中的文件描述符