簡體   English   中英

copy_file什么時候實際返回false?

[英]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 ,無論是拋出還是參數,都會為您提供更多詳細信息。

那么,回答你的問題:

  1. 如果成功則返回true,否則返回false
  2. 如果您需要有關錯誤的詳細信息,可以從異常或error_code參數中獲取。 請記住,這可能取決於系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM