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。