重命名文件名C++
我想用下划线替换空格字符并重命名目录中的文件名。一切看起来不错,但重命名操作不重命名文件。重命名文件名C++
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
或在参数rename
中使用绝对路径。
感谢您的回答。我改变了它,但没有工作:( – 2014-10-01 22:26:49
@KaidulIslam,看到我的更新 – 2014-10-01 22:36:32
谢谢!不是添加绝对路径前缀,我已经从同一目录执行此源文件,现在它工作! – 2014-10-01 22:40:27
你从'perror'得到什么信息? – 2014-10-01 22:23:08
重命名文件时出错:没有这样的文件或目录 – 2014-10-01 22:23:23
变量filename没有初始化,甚至没有初始化 – kotlomoy 2014-10-01 22:24:09