std::filesystem::file_size()和C++异常

vulvrdjw  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(176)

首先,我假设在为不存在的路径调用std::filesystem::file_size()时,得到C++异常是正常的。但我想知道为什么会发生这种情况,和/或我应该做些什么来避免异常?
一般来说,我的印象是,异常意味着我作为程序员走错了路。这里是这样吗?从我的经验来看,似乎大多数文件实用程序(至少在Visual Studio中)都会对这些(看似微不足道的)事情抛出异常,即使你希望这些条件是它们正常操作和行为的一部分。
通常,我调用这些函数是因为我不确定文件是否存在。但是我应该在请求大小之前调用另一个函数来确保它存在,比如std::filesystem::exists()?或者有什么方法可以禁用这些“次要”异常?我知道我可以在编译器中禁用异常,这样我就不会检测到它们。但在这种情况下它们仍在生成。任何关于这个主题的建议都将不胜感激。

gmxoilav

gmxoilav1#

使用std::filesystem::file_size的非抛出版本:

std::error_code theErrorCode;
auto theSize = std::filesystem::file_size(thePath, theErrorCode); // this won't throw
if (theErrorCode)
{
   // handle error
}
else
{
   // handle success, theSize contains the file size
}

或者将其封装到您自己的函数中,例如:

std::uintmax_t myfilesize(const std::filesystem::path& path, std::error_code& error)
{
  try
  {
    error.assign(0, std::generic_category());
    return std::filesystem::file_size(path);
  }
  catch (std::filesystem::filesystem_error& e)
  {
    error = e.code();  
    return 0;
  }
}

相关问题