C++ 调用std::filesystem::copy()时可能返回哪些错误代码?

C++ 调用std::filesystem::copy()时可能返回哪些错误代码?,c++,error-code,std-filesystem,C++,Error Code,Std Filesystem,我似乎找不到可能传递到的ec参数的错误代码列表 cppreference.com似乎表明错误代码是特定于操作系统的。查看(因为我对Windows错误代码特别感兴趣,不过我相信其他操作系统的资源对其他操作系统会有所帮助)它看起来几乎像是同一源文档的复制/粘贴,没有任何与Windows相关的附加信息 我的猜测是,错误代码将与列出的代码相同,但其中没有与文件系统相关的信息,或者更具体地说是与copy()函数相关的信息(除了经过教育的猜测) 是否有人知道可能返回的潜在错误代码,或者,如果我必须以艰难的方

我似乎找不到可能传递到的
ec
参数的错误代码列表

cppreference.com似乎表明错误代码是特定于操作系统的。
查看(因为我对Windows错误代码特别感兴趣,不过我相信其他操作系统的资源对其他操作系统会有所帮助)它看起来几乎像是同一源文档的复制/粘贴,没有任何与Windows相关的附加信息

我的猜测是,错误代码将与列出的代码相同,但其中没有与文件系统相关的信息,或者更具体地说是与
copy()
函数相关的信息(除了经过教育的猜测)


是否有人知道可能返回的潜在错误代码,或者,如果我必须以艰难的方式执行此操作(并手动尝试检查不同的错误场景),我如何知道是否有详尽的列表?

文件系统库使用的特定于系统的错误代码可以是。请注意,数值是如何将1:1映射到Win32 API函数返回的值的:

但是,您不应该直接针对这些进行测试。
system\u error
设计的全部要点是不必直接解释特定于系统的
error\u code
s,而只需通过相关的代码来解释它们

特别是,类别将
error\u code
值映射到。实现抛出一个
错误\u代码
,但客户端应用程序应始终检查
错误\u条件
s。与
error\u code
不同,
error\u条件
是可移植的,不依赖于实现细节

因此,您应该如何处理代码中的此类错误:检查希望以编程方式处理的值。然后对照这些值检查
错误\u code

std::error_code ec;
std::filesystem::copy("source.txt", "destination.txt", ec);
if (ec) {
    if (ec == std::errc::file_exists) {
        // special error handling for file_exists
        // [...]
    } else {
        // generic error handling for all other errors
        // that you don't specifically care about
        std::cerr << "Error: " << ec.message() << "\n";
    }
}
std::error_code ec;
std::filesystem::copy(“source.txt”、“destination.txt”、ec);
国际单项体育联合会(欧共体){
如果(ec==std::errc::file_存在){
//存在文件\的特殊错误处理
// [...]
}否则{
//所有其他错误的通用错误处理
//你并不特别关心的

STR::CURR MS不记录WiAPI函数的详尽列表-他们只说调用<代码> GETLASTORKEOR> <代码>。由于C++运行库的实现必须最终调用WiAPI级别,所以我认为不可能得到完整的错误列表。例如,参见DoC for Cuth> CreateFileW < /C>“…如果函数失败,返回值无效。\u HANDLE\u value。若要获取扩展的错误信息,请调用GetLastError…”如果您有特定的用例如果您希望根据错误代码执行不同的处理,您可以测试这些错误代码。但是根据我的经验,这些错误代码很少。例如,如果文件未找到、访问被拒绝、没有空间、网络故障等,您将采取什么不同的处理方式?您打算如何处理错误?
std::error\u code
的设计背后的要点是您仍然可以执行合理的错误处理,即使您对个别错误值一无所知。似乎没有关于如何处理错误值的任何信息(特别是在我的用例中,我没有使用异常),除了知道出了什么问题之外。我甚至不知道如何检查函数是否失败,例如,仅仅因为目标路径上已经有一个文件。因此,谢谢@ComicSansMS,你的答案正是我所需要的!我肯定也会查看那篇博文
std::error_code ec;
std::filesystem::copy("source.txt", "destination.txt", ec);
if (ec) {
    if (ec == std::errc::file_exists) {
        // special error handling for file_exists
        // [...]
    } else {
        // generic error handling for all other errors
        // that you don't specifically care about
        std::cerr << "Error: " << ec.message() << "\n";
    }
}