重命名目录中的所有文件
C++: Rename all files in a directory
已取得的成就和坚持的事项清单,以帮助理解我所要求的内容
我的成就:
打开用户指定的目录,显示该目录下的所有文件
我还没有达到的目标:
根据预定义的名称自动重命名该目录下的所有文件-文件目前以随机字符命名,我希望自动将它们重命名为"August 1","August 2","August 3"等。文件有不同的扩展名,我希望这些扩展名保持不变。
这就是我打开和显示目录的方式:void DirectorySelector::OpenDirectory(void)
{
// convert directory string to const char
DIRECTORY = directory.c_str();
pdir = opendir (DIRECTORY);
}
void DirectorySelector::DisplayDirectory(void)
{
// read directory
while (pent = readdir (pdir))
{
std::cout << pent->d_name << "n";
}
}
这就是我所坚持的,重命名文件(文件有不同的扩展名,不确定这是否会导致以后的问题?)
当程序到达while循环时,我得到以下错误:
在MultipleRename.exe中0x009657C1的未处理异常:0xC0000005:访问违反读取位置0xCCCCCDE0.
void DirectoryOperator::StandardRename(void)
{
i = 1;
while (pent = readdir (pdir))
{
oldname = pent->d_name;
newname = "August " + i;
OLDNAME = oldname.c_str();
NEWNAME = newname.c_str();
rename(OLDNAME, NEWNAME);
i++;
}
}
注意:所有声明都在其他地方处理,并且为了简单起见已经删除了验证,如果你需要代码,我可以发布它。此外,我已经检查了目录是否仍在DirectoryOperator类中打开,并且我在Windows上使用MSVS2012。
一行有问题:
newname = "August " + i;
"August "是一个char*,在将其转换为std::string之前将i添加到指针中。
所以,当i==1时,你的字符串将是"gust ",当它为2时,它将是"gust "。很快,当i> 8时,您将遇到未定义的行为。
解决方案:
newname = "August " + std::to_string(i); // c++11
或
#include<sstream>
...
stringstream ss;
ss << "August " << i;
newname = ss.str();
"当程序到达while循环时,我得到以下错误:"
Unhandled exception at 0x009657C1 in MultipleRename.exe: 0xC0000005: Access violation reading location 0xCCCCCDE0.
很可能pdir
没有正确初始化,当代码
while (pent = readdir (pdir))
。值0xC0000005
表示您正在尝试解引用某处的nullptr
。
你确定吗?
pdir = opendir (DIRECTORY);
按预期顺序调用,结果是有效的(pdir != nullptr
)?
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 以编程方式防止重命名或删除文件,但仍使其可写
- 使用 stdio.h 重新定位和重命名文件C++
- 如何检测哪些进程更改,重命名或创建文件?
- 录制后无法重命名 rosbag 文件
- 将文件重命名为已存在的文件名
- 移动了 QT 项目,重命名文件夹和项目名称,Moc'ing 返回"'-I'之后缺少值"
- 将 .c 文件重命名为 .cpp,导入 Cython 库失败
- 为什么将可执行文件重命名为临时文件的此代码段不能按预期工作?
- 如何在 C++ 中将文件从 ext4 文件系统重命名为 ntfs 文件系统
- 如何处理对生成文件中依赖项的重命名操作?
- 如何在C++中重命名具有"unknown"名称的文件?
- 重命名批处理文件(删除名称中的一些符号)(python/matlab/shell)
- 用C 的名称重命名文件
- 在C++中重命名Windows文件夹
- 在Objective-C中的目录中重命名多个文件
- 从工作iOS项目中导入.cpp文件并将其重命名为.mm问题
- 在C/C++中将文件重命名为unicode名称
- 自动文件重命名-const变量正在更改其值