我遇到boost::filesystem::exists(pathName)
问题。
当文件夹不存在时,该方法按预期返回false
。
如果文件夹存在,则会在Boost文件的make_permissions(const path& p, DWORD attr)
方法operations.cpp
中引发异常。
这是该文件的代码
if (equal_string_ordinal_ic(ext.c_str(), L".exe")
|| equal_string_ordinal_ic(ext.c_str(), L".com")
|| equal_string_ordinal_ic(ext.c_str(), L".bat")
|| equal_string_ordinal_ic(ext.c_str(), L".cmd"))
prms |= fs::owner_exe | fs::group_exe | fs::others_exe;
return prms;
消息是:
Exception thrown at 0x00000000 in LineSync.exe: 0xC0000005: Access violation executing location 0x00000000.
这是在if
声明中引发的。
我在Windows 10下的MFC应用程序中使用此方法。在Windows 7上,问题不存在。
如果我在Windows 10上创建示例Windows控制台应用程序,则问题也没有发生。
这是代码,它不适用于MFC
项目,但适用于Windows 10控制台应用程序。
boost::filesystem::path pathDir(L"logs");
if (!boost::filesystem::exists(pathDir)) {
boost::filesystem::create_directory(pathDir);
}
更改为boost::filesystem::is_directory(pathDir)
也会导致MFC项目上的例外
MFC和Windows 10有问题吗? 或者有更好的方法来检查特定目录是否存在?
编辑2:
这是一个应该在Windows上使用Boost 1.66
导致错误的示例bool dummy = boost::filesystem::exists("logs");
class Demo {
public:
~Demo() {
std::cout << boost::filesystem::path("logs").string() << std::endl;
}
};
Demo d;
int main()
{
Demo();
system("PAUSE");
return 0;
}
答案 0 :(得分:0)
有没有更好的方法来检查特定目录是否存在?
您也可以将PathFileExists与MFC一起使用。
正如MSDN所说:
确定文件系统对象(如文件或文件夹)的路径是否有效。
我已多次使用此功能,没有任何问题。如文章中所示,您必须在 shell轻量级API 中进行链接才能使其正常工作。