我在使用 boost::filesystem::exists 时遇到了一些奇怪的情况。如果您尝试检查未准备好或没有媒体的驱动器上是否存在文件,则会引发 basic_filesystem_error。就我所关心的 bfs::exists 的大多数用途而言,如果驱动器尚未准备好,则意味着该文件不存在。
我可以用 try-catch 包装我的调用以正确处理这种情况,但是它变得有点麻烦并且使代码有点笨拙。更糟糕的是,这意味着我正在使用 basic_filesystem_error 的特殊情况进行流量控制,这意味着如果出现该异常的其他原因,我将无法再正确处理它。
出现这种情况的一般情况是,如果我尝试检查 CD 或 DVD 驱动器上是否存在文件。我的代码曾经是:
if( bfs::exists( myFilePath ) )
{
...
}
变成:
bool fileExists( false );
try
{
fileExists = bfs::exists( myFilePath );
}
catch( bfs::basic_filesystem_error<bfs::path> e )
{
fileExists = false;
}
if( fileExists )
{
...
}
我并不太喜欢在我现有的代码库中到处进行这种更改。
我正在考虑在某个地方创建一个单独的函数来包装 try-catch 并用它替换我的 bfs::exist 调用,但我仍然不满意以这种方式使用 try-catch 是个好主意。似乎我正在为错过更重要和相关的特殊情况敞开大门。
我知道您可以为该函数的非抛出版本重新编译 boost,但我认为这并不能真正避免我的异常处理问题。
以前有没有人遇到过可移动媒体驱动器的这个问题,如果有,你是如何克服的?