为了获得another question nearby的满意答案,我正在调查来自System.Directory.getDirectoryContents
Haskell库的directory
的失败模式。这是一个平台无关的函数,可以编译Posix和Windows平台上的不同代码,然后调用特定于平台的API。如果我提供的路径不允许目录列表,我的目标是确定我可能期望的失败模式和错误。
Posix部分对我来说很清楚,因为我对Linux有一些经验,而且它实际上非常简单;可能引发的错误代码全部列在man 3 opendir
中,我不希望有任何意外。
Windows部分根本不清楚。它是一个昂贵的,封闭的源操作系统,在C++
(而不是C
)中编写(显然是?),我只是表面上熟悉它。由于它的价格和稀有性,我不会很快将手放在Windows操作的电脑上,所以我需要得到更好的捐赠者的帮助。
我希望我至少可以肯定,如果getDirectoryContents
由于任何可预见的原因而失败(我不考虑突然的硬件故障),它将会在调用{{FindFirstFileW
时失败1}},即here。是这样的吗?也就是说,在FindNextFileW
的后续调用中它是否也不会失败?我认为不是,因为此时目录条目应该映射到内存,并且当句柄保持打开时,即使删除底层存储中的文件也不应该销毁它们。至少,这是我对Linux的期望。同样的想法是否适用于Windows?我怀疑是因为,对于一个事实来说,搜索glob可能比通过读取文件系统的单个条目(这是Posix系统通过opendir
执行的操作)更复杂。< / p>
如果GetLastError
返回空句柄或FindFirstFileW
错误,Haskell包装器会调用FindNextFileW
。我怎样才能找出哪些错误代码可以表现出来以及在什么情况下?我为FindFirstFile
发现了some official help,但我认为没有提到错误代码值及其含义;两者都不在help for FindNextFile
。
总的来说,我显然缺乏对WinApi的理解,我希望这些问题的答案可以从对Windows操作系统的一般理解中得出。因此,我会享受原则性的答案,或者纠正我的预设,而不仅仅是明确说明事实的答案。