已经实现的目录以及我为帮助理解我的要求而坚持的目标
我取得的成就:
打开用户指定的目录,显示该目录中的所有文件。
我还没有实现的目标:
根据预定义的名称自动重命名此目录中的所有文件 - 文件当前被命名为随机字符,我希望自动将它们重命名为" 8月1日和#34;," 8月2日" ," 8月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。
提前致谢。
答案 0 :(得分:2)
该行存在问题:
newname = "August " + i;
8月&#34; 8月&#34;是一个char *,在将它转换为std :: string之前,我被添加到指针中。
所以,当i == 1时,你的字符串将是&#34; ugust&#34;,当它是2时,它将是&#34; gust&#34;。非常快,当我&gt; 8,你将遇到未定义的行为。
解决方案:
newname = "August " + std::to_string(i); // c++11
或
#include<sstream>
...
stringstream ss;
ss << "August " << i;
newname = ss.str();
答案 1 :(得分:1)
&#34;一旦程序遇到while循环,我就会收到以下错误:&#34;
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
)?