我正在使用将Windows,Linux和Mac文件IO调用抽象为宏(以避免C运行时,因此没有 fopen
, fclose
等……)。我实际上有相当多的工作,但我遇到了绊脚石。
我试图将每个平台可能抛出的所有可能错误归结为常见的错误:未找到,存在,无效访问等。
Linux显然是很好的文档,Mac甚至有最常见的文档,但Windows没有指定为其本机文件I / O函数抛出哪些错误。 我们显然需要使用 GetLastError()
,但我找不到可能值的引用。
这个怎么样?
我正在编写Windows应用程序并使用CreatFile()
API。 我想尽可能优雅地处理任何错误,并且可能从错误中恢复而不是告诉用户“废话!不能那样做”。 但是MSDN文档没有列出可能生成的错误代码。
有没有人引用Windows文件函数可能生成的错误代码,特别是(现在) CreateFile()
?
Windows支持可安装的文件系统。 Microsoft无法预测第三方文件系统驱动程序将生成哪种错误,因此不会尝试承诺严格的可能错误代码子集。
所以是的,你真的必须使用GetLastError()。 FormatMessage()函数可用于为错误代码生成可读字符串。 通常,用户将获得一个体面的错误消息,帮助他诊断根本原因。 这并不足以说明智利的地震切断了海底通信电缆,但它肯定会帮助他开始研究网络问题。 您也可以使用CRT包装,但不可避免地会失去特异性。 这可能是您必须处理的服务调用,而不是用户的IT人员。
避免C运行时
你正在重新发明轮子。 C运行时已经创建,因此人们可以编写独立于平台的程序(理论上)可以在任何地方编译,只要您没有使用特定于平台的东西。 现在,你正在做同样的事情。
我建议停止这样做,并使用标准的C文件function,或者支持多个平台的跨平台框架。 你可以使用Boost或Qt 4。
关于你的问题
有没有人引用Windows文件函数可能生成的错误代码,
MSDN上提供了WinAPI文档,您应该阅读它。
的CreateFile
GetLastError函数
SystemErrorCodes
有没有人引用Windows文件function可能生成的错误代码
因为CreateFile不仅处理“文件”(它也适用于目录,管道,物理设备等),您应该假设它可以生成任何存在的操作系统代码。 根据msdn,总共有16000个代码。 故事的道德:如果您想生成人类可读的消息,请使用FormatMessage 。 如果文档没有列出可能的错误代码(对于CreateFile),它自动意味着CreateFile可以生成任何存在的错误代码。
以上就是c/c++开发分享Windows CreateFile可能的错误代码相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522956.html