Windows CreateFile可能的错误代码

我正在使用将Windows,Linux和Mac文件IO调用抽象为宏(以避免C运行时,因此没有fopenfclose等……)。 我实际上有相当多的工作,但我遇到了绊脚石。

我试图将每个平台可能抛出的所有可能错误归结为常见的错误:未找到,存在,无效访问等。

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可以生成任何存在的错误代码。