[英]When does copy_file actually return false?
std::filesystem::copy_file
的簡單版本具有以下簽名:
bool copy_file(const path& from, const path& to);
返回值描述為:
如果文件已復制,則為true,否則為false。
這通常是有意義的,如果操作失敗,您可能希望使用if包裝調用並報告錯誤,如下所示:
if (!fs::copy_file(inputImage, outputImage))
{
LOG(error) << "Failed to copy file:" << inputImage << " ==> " << outputImage;
}
但是 ,如果你看一下例外的文檔:
不帶std :: error_code&參數的重載將使用from作為第一個路徑參數構造的底層OS API錯誤拋出filesystem_error作為第二個路徑參數,並將OS錯誤代碼作為錯誤代碼參數。
這引出了我的問題,如果失敗,例如權限不足,文件鎖定和其他文件系統錯誤導致異常,簡單的copy_file
在什么條件下返回false
?
原因是copy_file(a,b)
只是copy_file(a,b,copy_options::none)
的重載,它總是返回true
或拋出異常。 但是當你使用例如copy_file(a,b,copy_options::skip_existing)
你也可以收到有效的false
,沒有異常,因此你知道目標文件已經存在。
您有兩種方法來處理filesystem
的錯誤。 這基本上是從boost繼承而來的。 您可以將錯誤放在該error_code
引用中,也可以從異常中獲取錯誤。
基本上,保證不會拋出帶參數的版本,並且不帶參數的版本會拋出錯誤。 如果您不關心導致該問題的特定錯誤,則布爾返回會簡化此操作。 error_code
,無論是拋出還是參數,都會為您提供更多詳細信息。
那么,回答你的問題:
error_code
參數中獲取。 請記住,這可能取決於系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.