我写了这段代码,列出了当前目录中的所有JPG文件,
#include <string.h>
#include <stdio.h>
#include <dirent.h>
int main() {
char *ptrToSubString;
char fileName[100];
DIR *dir;
struct dirent *ent;
dir = opendir(".");
if (dir != NULL) {
while((ent = readdir(dir)) != NULL) {
strcpy(fileName,ent->d_name);
ptrToSubString = strstr(fileName,".jpg");
if (ptrToSubString != NULL) {
printf("%s",ent->d_name);
} else {
continue;
}
}
closedir(dir);
} else {
perror("");
return 5;
}
return 0;
}
但是我想添加将文件重命名为唯一文件名的功能,或者在文件名中附加唯一标识符。
例如,如果程序列出以下文件名:
我想将它们重命名为
关于如何实现这一目标的任何想法?任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
拆分名称:
*(ptrToSubString++) = 0x0;
然后重新组合添加随机十六进制序列(或者可能是计数器?)的名称
snprintf(newFilename, SIZE_OF_NEWFILENAME_BUFFER,
"%s-%06x.%s", fileName, rndhex, ptrToSubString);
在新文件上调用rename()
。
<强>更新强>
正如Zack所注意到的,如果新文件存在,重命名将不会失败,因此在生成newFilename
之后,stat
(注意竞争条件 - 请参阅Zack的其他评论)或open(newFilename, O_WRONLY|O_CREAT|O_EXCL, 0600)
来验证新名称是否未被使用。如果是,则生成一个新的随机并重复。
答案 1 :(得分:1)
rename
中找到了stdio.h
个功能。你可以这样使用:
/* rename example */
#include <stdio.h>
int main (){
int result;
char oldname[] ="oldname.txt";
char newname[] ="newname.txt";
result= rename( oldname , newname );
if ( result == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
return 0;
}
只需根据您的需求进行调整即可。您还可以阅读更多信息here.