如果我在错误的路径上调用FindFirstFile会发生什么?错误会有意义吗?

时间:2018-03-10 18:12:45

标签: c++ haskell winapi error-handling filesystems

为了获得another question nearby的满意答案,我正在调查来自System.Directory.getDirectoryContents Haskell库的directory的失败模式。这是一个平台无关的函数,可以编译Posix和Windows平台上的不同代码,然后调用特定于平台的API。如果我提供的路径不允许目录列表,我的目标是确定我可能期望的失败模式和错误。

  • 这可能是一条不存在的道路。
  • 它可能不是目录。
  • 来电者可能缺乏获取商家信息的权限。
  • 我还可以考虑其他失败模式,但我不会在这里列出所有这些模式。

Posix部分对我来说很清楚,因为我对Linux有一些经验,而且它实际上非常简单;可能引发的错误代码全部列在man 3 opendir中,我不希望有任何意外。

Windows部分根本不清楚。它是一个昂贵的,封闭的源操作系统,在C++(而不是C)中编写(显然是?),我只是表面上熟悉它。由于它的价格和稀有性,我不会很快将手放在Windows操作的电脑上,所以我需要得到更好的捐赠者的帮助。

我的问题:

  1. 我希望我至少可以肯定,如果getDirectoryContents由于任何可预见的原因而失败(我不考虑突然的硬件故障),它将会在调用{{FindFirstFileW时失败1}},即here。是这样的吗?也就是说,在FindNextFileW的后续调用中它是否也不会失败?我认为不是,因为此时目录条目应该映射到内存,并且当句柄保持打开时,即使删除底层存储中的文件也不应该销毁它们。至少,这是我对Linux的期望。同样的想法是否适用于Windows?我怀疑是因为,对于一个事实来说,搜索glob可能比通过读取文件系统的单个条目(这是Posix系统通过opendir执行的操作)更复杂。< / p>

  2. 如果GetLastError返回空句柄或FindFirstFileW错误,Haskell包装器会调用FindNextFileW。我怎样才能找出哪些错误代码可以表现出来以及在什么情况下?我为FindFirstFile发现了some official help,但我认为没有提到错误代码值及其含义;两者都不在help for FindNextFile

  3. 总的来说,我显然缺乏对WinApi的理解,我希望这些问题的答案可以从对Windows操作系统的一般理解中得出。因此,我会享受原则性的答案,或者纠正我的预设,而不仅仅是明确说明事实的答案。

    更新。

    asked维护者和我向我指出了file的存在,其中包含Windows和Posix错误代码之间的转换表。

0 个答案:

没有答案