FindFirstFileEx不区分大小写

时间:2013-05-15 13:13:02

标签: c# case-sensitive case-insensitive

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

所以我尝试FindFirstFileExdwAdditionalAttributes设置为1,代表FIND_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);

2 个答案:

答案 0 :(得分:4)

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

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

更多详细信息:http://www.siao2.com/2010/12/08/10101148.aspx

答案 1 :(得分:2)

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

要更改此设置,您必须更改注册表中的值(据我所知)。

请看这里的血腥细节:

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

在你的情况下,我希望

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