gpt4 book ai didi

c - 如何在C中重命名文件名

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:13 25 4
gpt4 key购买 nike

我写了这段代码,列出了当前目录下的所有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
  • 推特.png

我想将它们重命名为

  • facebook-a0b1c2.png
  • instagram-d3e4f5.png
  • twitter-a6b7c9.png

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

最佳答案

拆分名称:

*(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) 必须用于验证新名称未被使用。如果是,则生成一个新的随机数并重复。

关于c - 如何在C中重命名文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com