C++ Boost目录迭代器引发错误\u无效\u驱动器
我观察到boost(1.64版)目录迭代器构造函数(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:
directory\u iterator(const path&p)
)在windows系统上抛出一个异常,错误是驱动器无效。我想问题发生在NTFS上,但不能100%确定
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://
位置访问目录,因为您的程序不知道这一点。请尝试使用源文件本地的一些目录,如/
或。//
。