如何在C中重命名文件名

时间:2012-09-28 23:25:38

标签: c

我写了这段代码,列出了当前目录中的所有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;
}

但是我想添加将文件重命名为唯一文件名的功能,或者在文件名中附加唯一标识符。

例如,如果程序列出以下文件名:

  • facebook.png
  • instagram.png
  • twitter.png

我想将它们重命名为

  • Facebook的a0b1c2.png
  • 的Instagram-d3e4f5.png
  • Twitter的a6b7c9.png

关于如何实现这一目标的任何想法?任何帮助将不胜感激!谢谢!

2 个答案:

答案 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.