C++ 文件类型判别错误,将目录文件识别为普通文件

场景:

  我使用Linux操作系统的时候,自己的虚拟机能够正常判断文件类型,而且同一台电脑之前几次都能正确识别文件类型,但这一次识别文件类型错误。单步调试,文件名能够正常被读取。下面的函数中除了"."和".."的目录能够正常识别以外,其余目录文件全被识别为普通文件(ptr->d_type为0)。

代码如下:

    std::vector<std::string> folderList;
    DIR *dir;
    struct dirent *ptr;
    std::string allPath = path; //文件或文件的完整路径
    if ((dir=opendir(allPath.c_str())) == NULL){
        zout<<"open dir error:"<<allPath << endl;
        std::perror("error info:");
        return folderList;
    }
    while ((ptr=readdir(dir)) != NULL){
        if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
            continue;
        else if(ptr->d_type == 4){    //若为目录文件则返值为,普通文件则为0
            folderList.push_back(ptr->d_name);
        }
    }
    std::sort(folderList.begin(), folderList.end());
    closedir(dir);
    return folderList;

产生原因:

  硬盘所在的目录未被挂载成功。

查看磁盘情况:

  查看磁盘情况:df -h(发现无对应磁盘)

  查看设备情况: ls /dev/md*

  C++ 文件类型判别错误,将目录文件识别为普通文件

 

 解决方法:

  命令行输入:mount /dev/md127(设备路径) /mnt/store(文件和目录所在路径),即将"/dev/md127"设备挂载在"/mnt/store"路径下的。  问题得以解决。

上一篇:条款19:使用`std::shared_ptr`管理具备共享所有权的资源


下一篇:11.6 题解报告