重命名文件名C++

Rename filename C++

本文关键字:C++ 文件名 重命名      更新时间:2023-10-16

我正在尝试用下划线替换空白字符,并重命名目录中的文件名。一切似乎都很好,但重命名操作并没有重命名文件。

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)] = '';
        // 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, %sn", 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不是有效的文件名。

可以从chdirdirectoryPath,也可以在参数中使用到rename的绝对路径。