C++ Boost目录迭代器引发错误\u无效\u驱动器

C++ Boost目录迭代器引发错误\u无效\u驱动器,c++,boost,filesystems,C++,Boost,Filesystems,我观察到boost(1.64版)目录迭代器构造函数(directory\u iterator(const path&p))在windows系统上抛出一个异常,错误是驱动器无效。我想问题发生在NTFS上,但不能100%确定 错误\u无效\u驱动器的一般原因是什么 在目录迭代器(constpath&p)中可能会抛出什么?据我所知,它只是列出了一个目录,所以我想不出一种方法来获取一个无效的驱动器 更新: 以下是相关代码: namespace bfs = boost::filesystem; bfs:

我观察到boost(1.64版)目录迭代器构造函数(
directory\u iterator(const path&p)
)在windows系统上抛出一个异常,错误是驱动器无效。我想问题发生在NTFS上,但不能100%确定

  • 错误\u无效\u驱动器的一般原因是什么
  • 在目录迭代器(constpath&p)中可能会抛出什么?据我所知,它只是列出了一个目录,所以我想不出一种方法来获取一个无效的驱动器
  • 更新:

    以下是相关代码:

    namespace bfs = boost::filesystem;
    
    bfs::path cache_path("C:/Users/Администратор/AppData/Local/some_unique_path/");
    
    long long dir_size = 0;
    
    boost::system::error_code ec;
    
    int err_no = 0;
    
    for (bfs::directory_iterator it(cache_path), eit; it != eit; it.increment(ec)) {
        if (ec) {
            std::cout << "Error " << 0 << ":" << ec << " while clearing the cache\n";
            return;
        }
    
        dir_size += bfs::file_size(it->path(), ec);
    
        if (ec) {
            std::cout << "Error " << 1 << ":" << ec << " while clearing the cache\n";
            return;
        }
    }
    
    dir_size >>= 20; // want current cache size in Mb
    
    if (dir_size > new_size) {
        std::cout << "Clearing the kernel cache..." << std::endl;
        // each file is attempted to be removed
        for (bfs::directory_iterator it(cache_path), eit; it != eit; ++it) {
            if (ec) {
                std::cout << "Error " << 2 << ":" << ec << " while clearing the cache\n";
                return;
            }
            bfs::remove(it->path(), ec); // this ec is skipped: don't care if it was impossible to delete file
        }
    }
    
    namespace bfs=boost::filesystem;
    bfs::路径缓存路径(“C:/Users/Ааааааааа/AppData/Local/someаu uniqueаu path/”;
    long dir_size=0;
    boost::system::error_code ec;
    int err_no=0;
    对于(bfs::directory\u迭代器it(cache\u path),eit;it!=eit;it.increment(ec)){
    国际单项体育联合会(欧共体){
    
    std::cout很高兴看到您的一段代码。通常这意味着目录不存在。请注意,在Windows中,目录路径具有以下格式,例如,
    “C:\dir1\dir2”
    。很难为您提供帮助,因为您没有提供任何源代码示例。可能您只是提供了格式错误的路径。

    如果您能看到一段代码就好了。通常这意味着目录不存在。请注意,在Windows中,目录路径的格式如下所示,例如,
    “C:\dir1\dir2”
    。很难为您提供帮助,因为您没有提供任何源代码示例。可能您只是提供了格式错误的path。

    您有boost的源代码。只需进入它,直到找到可能的内部代码(win32/crt)函数失败。找出哪些参数被传递到该函数中,然后查找该函数的文档。如果不起作用,请用这些详细信息编辑问题,我们可能会提供帮助。@MikeVine,不幸的是,我没有办法直接调试它,因为它发生在我无法访问的机器上,所以这只是猜测游戏,很抱歉要求和我一起玩。我已经用所有与boost相关的代码更新了我的问题:我拥有的文件系统模块。也许,这会有帮助。您有boost的源代码。只需进入它,直到找到可能的内部(win32/crt)为止函数失败。找出哪些参数被传递到该函数中,然后查找该函数的文档。如果不起作用,请用这些详细信息编辑问题,我们可能会提供帮助。@MikeVine,不幸的是,我没有办法直接调试它,因为它发生在我无法访问的机器上,所以这只是猜测游戏,很抱歉要求和我一起玩。我已经用所有与boost:filesystem模块相关的代码更新了我的问题。也许,这会有帮助。我只是认为向构造函数添加一个调用不会有多大帮助,但好吧,我已经添加了所有与boost文件系统相关的代码。注意字符串,它用于初始化
    boost::filesystem::path
    。它使用反斜杠。我认为windows能够处理它们,不是吗?关于反斜杠,我认为它依赖于IDE。您是否尝试过将所有的
    “/”
    替换为
    “\”
    ?我认为这就是问题所在。请详细说明“依赖于IDE”的内容?不幸的是,我不能仅仅替换,因为它发生在我无法访问的机器上,但正如我从中看到的,boost应该在windows上处理反斜杠分隔符,还是我弄错了文档?我是说一些IDE使用了它们的“根”目录与源文件的目录相同,其他目录使用一个更高的目录。请参阅,您不能直接从
    C://
    位置访问目录,因为您的程序不知道这一点。请尝试使用源文件本地的一些目录,如
    /
    。//
    。我只是想添加对构造函数不会有多大帮助,但好的,我已经添加了所有与boost文件系统相关的代码。注意字符串,它用于初始化
    boost::filesystem::path
    。它使用反斜杠。我认为windows能够处理它们,不是吗?关于反斜杠,我认为它依赖于侧边。您是否尝试过替换所有
    >“/”
    “\”
    ?我想这就是问题所在。你能详细说明一下“依赖于IDE”吗?不幸的是,我不能直接替换,因为它发生在我无法访问的机器上,但正如我从中看到的那样,boost应该在windows上处理反斜杠分隔符,还是我弄错了文档?我是说一些IDE使用了它们的“根”目录与源文件的目录相同,其他目录使用一个更高的目录。请参阅,您不能直接从
    C://
    位置访问目录,因为您的程序不知道这一点。请尝试使用源文件本地的一些目录,如
    /
    。//