我正在尝试用下划线替换空白字符并重命名目录中的文件名。一切似乎都很好,但重命名操作并未重命名文件。
DIR *dir;
char *directoryPath = "E:\\markdown-here.wiki\\LeetCode_problems_solution\\";
struct dirent *ent;
if ((dir = opendir (directoryPath)) != NULL) {
while ((ent = readdir (dir)) != NULL) {
char *filename;
for(int i = 0; i < strlen(ent->d_name); ++i) {
if(ent->d_name[i] == ' ')
filename[i] = '_';
else filename[i] = ent->d_name[i];
}
filename[strlen(ent->d_name)] = '\0';
// output: Error renaming file: No such file or directory
int result = rename(ent->d_name, filename);
if(result == 0) puts ( "File successfully renamed" );
else perror( "Error renaming file" );
// this works
printf ("%s, %s\n", ent->d_name, filename); // foo bar, foo_bar
}
closedir (dir);
} else {
/* could not open directory */
perror ("");
return EXIT_FAILURE;
}
这里有什么问题吗?
最佳答案
主要问题是你有:
char *filename;
但还没有为它分配内存。您遇到了未定义的行为。
尝试
char filename[1000]; // Or something large enough.
此外,您使用 rename
的方式,只有当当前目录设置为 directoryPath
时才会起作用,否则,ent->d_name
不是有效的文件名。
您可以chdir
到directoryPath
或在参数中使用绝对路径来重命名
。
关于c++ - 重命名文件名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151631/