重命名文件名C++
Rename filename 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)] = ' ';
// 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
不是有效的文件名。
可以从chdir
到directoryPath
,也可以在参数中使用到rename
的绝对路径。
相关文章:
- 从命令行c++发送文本文件名
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 当Microsoft文档仅包含 C# 示例时,如何查找 C++ 包含文件名
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 在Visual Studio 2019中保存时ReadDirectoryChangesW文件名的问题
- C++:在Windows中浏览名称中带有点的文件名
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 不带预处理器的调用方法/文件的文件名/行号
- 在 C++ 中为文件名添加时间戳
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 如何将文件名作为参数传入并正确打开?
- 如何在目录及其子文件夹中构建文件名字符串向量?
- 要求用户输入C++输出文件名
- 从Arduino SD卡模块到Array的文件名
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- C++ 从变量导入文件名
- 从 Makefile 中的 $@ 获取文件名
- VSCode C++调试文件名中包含中文字符的文件时插件损坏
- _CrtSetAllocHook - 空文件名和行号参数