Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:重命名目录中的所有文件_C++_File_Directory_Dirent.h - Fatal编程技术网

C++ C++;:重命名目录中的所有文件

C++ C++;:重命名目录中的所有文件,c++,file,directory,dirent.h,C++,File,Directory,Dirent.h,列出已经取得的成就和我坚持要做的事情,以帮助理解我的要求 我所取得的成就: 打开用户指定的目录,显示此目录中的所有文件 我尚未达到的目标: 根据预定义的名称自动重命名此目录中的所有文件-文件当前以随机字符命名,我希望自动将其重命名为“8月1日”、“8月2日”、“8月3日”等。尽管文件具有不同的扩展名,但我希望扩展名保持不变 这就是我打开和显示目录的方式: void DirectorySelector::OpenDirectory(void) { // convert directory

列出已经取得的成就和我坚持要做的事情,以帮助理解我的要求

我所取得的成就:

打开用户指定的目录,显示此目录中的所有文件

我尚未达到的目标:

根据预定义的名称自动重命名此目录中的所有文件-文件当前以随机字符命名,我希望自动将其重命名为“8月1日”、“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";
    }
}
注意:为了简单起见,所有声明都在别处处理,并且已经删除了验证,如果您需要代码,我可以发布它。 另外,我已经检查了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();