C++ C++;:重命名目录中的所有文件
列出已经取得的成就和我坚持要做的事情,以帮助理解我的要求 我所取得的成就: 打开用户指定的目录,显示此目录中的所有文件 我尚未达到的目标: 根据预定义的名称自动重命名此目录中的所有文件-文件当前以随机字符命名,我希望自动将其重命名为“8月1日”、“8月2日”、“8月3日”等。尽管文件具有不同的扩展名,但我希望扩展名保持不变 这就是我打开和显示目录的方式:C++ C++;:重命名目录中的所有文件,c++,file,directory,dirent.h,C++,File,Directory,Dirent.h,列出已经取得的成就和我坚持要做的事情,以帮助理解我的要求 我所取得的成就: 打开用户指定的目录,显示此目录中的所有文件 我尚未达到的目标: 根据预定义的名称自动重命名此目录中的所有文件-文件当前以随机字符命名,我希望自动将其重命名为“8月1日”、“8月2日”、“8月3日”等。尽管文件具有不同的扩展名,但我希望扩展名保持不变 这就是我打开和显示目录的方式: void DirectorySelector::OpenDirectory(void) { // convert directory
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";
}
}
注意:为了简单起见,所有声明都在别处处理,并且已经删除了验证,如果您需要代码,我可以发布它。
另外,我已经检查了DirectoryOperator类中的目录是否仍然打开,并且我正在Windows上使用MSVS2012
提前谢谢
“当程序点击while循环时,我立即收到以下错误:”
multipleName.exe中0x009657C1处未处理的异常:0xC0000005:访问冲突读取位置0xCCCDE0。
最有可能的是,当代码被删除时,pdir
没有正确初始化
while (pent = readdir (pdir))
被称为。值0xC0000005
表示您正试图在某处取消对nullptr
的引用
你确定吗
pdir = opendir (DIRECTORY);
按预期顺序调用,结果有效(
pdir!=nullptr
)?行有问题:
newname = "August " + i;
“August”是一个char*,在指针转换为std::string之前,会将i添加到指针中
因此,当i==1时,字符串将为“ugust”,当它为2时,字符串将为“gust”。很快,当i>8时,您将遇到未定义的行为
解决方案:
newname = "August " + std::to_string(i); // c++11
或
#包括
...
细流ss;
ss“根据预定义名称自动重命名此目录中的所有文件”关于这一点,您的确切条件/要求是什么?这些文件当前命名为随机字符,我希望将它们重命名为“8月1日”、“8月2日”、“8月3日”等。很抱歉,文本中没有明确说明这一点,虽然代码比我解释得更好,但是如果我理解正确的话,你想保留实际的文件扩展名吗?您应该编辑您的问题,以指出代码中的实际问题。顺便说一句,对于使用路径、文件名、扩展名a.s.o.,您可能会发现这些类很有用。@πάνταῥεῖ 编辑了这个问题并查看了boost::filesystem,谢谢你是对的,在DirectorySelector和DirectoryOperator类之间的某个地方pdir似乎出了问题
newname = "August " + std::to_string(i); // c++11
#include<sstream>
...
stringstream ss;
ss << "August " << i;
newname = ss.str();