c++ - 重命名文件名 C++

标签 c++ file

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

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 不是有效的文件名。

您可以chdirdirectoryPath 或在参数中使用绝对路径来重命名

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

相关文章:

python - 加快 ~50GB CSV 文件的轻处理

dup2 上的困惑

c++ - AVX2 的 _mm256_cmp_epi32_mask 的模拟

c++ - 如何保护 C++03 和 C++11 的移动构造函数?

c++ - 在 RedHat 7.2 中获取构建日期和时间

c - 如何将值传递给结构变量然后将结构写入文件?

C++ 创建空字节

c++ - 使用 g++ 编译并将 GraphicsMagick++ 作为静态库

Python ftplib 文件传输 error_perm

file - Hadoop Map Reduce - 读取 HDFS 文件 - FileAlreadyExists 错误