3

由于我使用的宏在给定路径与驱动器上的本地路径大小写不相等的情况下似乎可以工作,因此我首先需要验证路径是否存在大小写。不幸的是(在我的情况下)Directory.Exists()不区分大小写。

所以我尝试了FindFirstFileExdwAdditionalAttributes设置1FIND_FIRST_EX_CASE_SENSITIVE。但是,它似乎对我不起作用。我的本地路径是C:\Dir1\Dir2\Dir3. 我比较的路径是C:\dir1\Dir2\Dir3. 不幸的是,我总是得到Dir3结果。如果案例不匹配,我会期待一个空的结果。

我的错是什么?

string dir = @"C:\Dir1\Dir2\Dir3" + '\0';
int FIND_FIRST_EX_CASE_SENSITIVE = 1;
WIN32_FIND_DATA fi;

IntPtr h = FindFirstFileEx( dir,
                            FINDEX_INFO_LEVELS.FindExInfoStandard,
                            out fi,
                            FINDEX_SEARCH_OPS.FindExSearchNameMatch,
                            IntPtr.Zero,
                            FIND_FIRST_EX_CASE_SENSITIVE);
4

2 回答 2

5

此功能取决于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive设置为 0 的注册表项的值,这不是默认值。

换句话说,它取决于底层文件系统设置,而不是 API 本身。

更多细节在这里:http ://www.siao2.com/2010/12/08/10101148.aspx

于 2013-05-15T13:21:41.817 回答
2

默认情况下,Windows 中的文件搜索始终不区分大小写,无论使用FIND_FIRST_EX_CASE_SENSITIVE.

要更改这一点,您必须更改注册表中的值(据我所知)。

有关血腥的详细信息,请参见此处:

http://www.nicklowe.org/2012/02/understanding-case-sensitive-in-windows-obcaseinsensitive-file_case_sensitive_search/

在你的情况下,我希望

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel, REG DWORD obcaseinsensitive设置为 1

于 2013-05-15T13:17:21.357 回答