C# FindFirstFileEx不';不要区分大小写

C# FindFirstFileEx不';不要区分大小写,c#,case-sensitive,case-insensitive,C#,Case Sensitive,Case Insensitive,由于我使用的是一个宏,如果给定路径的大小写与驱动器上的本地路径不相等,则该宏似乎可以工作,因此我首先需要验证该路径是否存在。不幸的是(在我的例子中)Directory.Exists()不区分大小写 因此,我尝试将dwAdditionalAttributes设置为1,它代表。然而,它似乎不适合我。我的本地路径是C:\Dir1\Dir2\Dir3。我比较的路径是C:\dir1\Dir2\Dir3。不幸的是,我总是得到Dir3。如果案例不匹配,我会期望一个空的结果 什么是我的错 string dir

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

因此,我尝试将
dwAdditionalAttributes
设置为
1
,它代表。然而,它似乎不适合我。我的本地路径是
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);

默认情况下,Windows中的文件搜索始终不区分大小写,而不考虑使用
FIND\u FIRST\u EX\u case\u SENSITIVE

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

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

就你而言,我想


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

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

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


此处有更多详细信息:

实际路径与作为参数传递的路径相同。在我看来,您应该以另一种方式解决原始问题,而不是在不区分大小写的环境中依赖文件系统对象的大小写。那个宏有什么不起作用?@ken2k谢谢,我的错。@0xA3宏停止在文件夹浏览器对话框中展开文件夹,直到出现不匹配的情况。我无法更改宏本身。如果我将其设置为0。我需要重新启动吗?因为FindFirstFileEx仍然发现了一些东西…哦,天哪。。。是否有其他方法可以验证区分大小写的内容?我可以重新启动系统,因为其他人也会使用它。这不仅是因为其他人可能会使用它-它还可能破坏其他东西。以下是我链接的文章:
这一操作的实际效果是更改注册表项“点亮”NT应用程序和驱动程序中不希望出现区分大小写行为的潜在bug。