当Windows在NTFS分区中遇到两个名称相同但大小写不同的文件时,默认的预期行为是什么?


16

从Linux向NTFS分区写入两个文件很容易,并且两个文件都包含相同字母但大小写不同,例如some_file.txt和Some_File.txt。Linux区分它们。

Windows如何处理这些?


1
就个人而言,由于涉及的所有因素,我只想说这会导致不确定的行为。如果Windows在这种情况下未定义行为,则根据定义,它是未定义的。如果Windows 确实定义了该行为,我仍然会将其视为未定义的行为,因为我严重怀疑所有程序都一致地处理此行为。
jpfx1342 2014年

Answers:


20

MS-DOS,WOW和Win32个性将返回第一个匹配的文件。对于某些应用程序和API,区分不敏感强制执行(例如,MS-DOS就不能处理它)。POSIX个性有所不同,并且默认情况下区分大小写(例如,如果安装了UNIX工具)。Windows NT本机命令提示符将同时显示,但根据设置(ObCaseInsensitive)和工具使用的API的不同,只能访问找到的第一个API。

请参阅Microsoft Technet文章NTFS卷上的文件名区分大小写(KB100625),并详细讨论各种NT子系统中区分大小写的细微差别了解Windows中的区分大小写:obcaseinsensitive,FILE_CASE_SENSITIVE_SEARCH

特别是,ObCaseInsensitive值控制整个NT对象管理器的区分大小写:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • 设置为0时,对象管理器在区分大小写的模式下运行。
  • 设置为1时,对象管理器以不区分大小写的模式运行。
  • 未指定时,NT 5.1(Windows XP)和更高版本默认在不区分大小写的模式下运行。
  • obcaseinsensitive在NT 5.0(Windows 2000)和以前的NT版本中始终没有区别,它们始终以区分大小写的方式运行。

此时,Cygwin 应该选择基本的/有效的区分大小写设置。

相关超级用户问题如何在Windows 7中配置文件夹名称区分大小写?和TechNet文章配置文件和文件夹名称的大小写敏感,如果您需要定期处理这种情况,则有关在NT中为文件和文件夹启用完全大小写敏感的更多信息。

有关区分大小写的工具/对NTFS / NFS卷的访问的其他资源:


如果存在两个文件One.txt和ONE.txt,如果我提供one.txt,哪个文件将“首先匹配”?是否有关于“第一个匹配文件”的规则?
trusktr 2014年

1
它可能基于目录中的内部文件顺序。如果您想确切知道的话,我明天再试试。
丹尼尔B

2
哪个首先出现完全取决于它们在目录中出现的顺序。这不一定是创建它们的顺序。如果修改文件或更新目录,则可能会更改。(Chkdsk,碎片整理,删除,复制移动该文件夹中的其他文件都可以更改顺序。)
Tonny 2014年

1
@trusktr毕竟,显然存在某种命令。我创建了多组文件(使用NTFS-3G),每个文件具有不同的大小写和顺序。Windows(或更准确地说,记事本)始终选择以大写字母开头的文件,而不管其创建顺序如何。more只是返回一个问号。
丹尼尔·B

1
@trusktr它将遵循目录的B +树的INDX条目的顺序。该树按设计保留排序,但是根据NTFS驱动程序的不同可能会略有不同。当遍历指定名称和INDX条目名称的(排序的)树时,它将是第一个匹配项(OnCaseInsensitive = 0,Win32 / DOS / WOW API)。NTFS使用序数比较,因此始终在小写字母之前找到大写字母。(AZ = 0041-005A,az = 0061-007A)
Maxx Daymon

2

没有。它考虑大小写差异,但在其他情况下,完全相同的名称是相同的文件。

您可以通过以下方式进行测试:创建一个全部为小写的文件,然后再创建一个仅大写一个字母的文件,它将抱怨。


我现在没有环境可以对其进行测试。我目前只有OSX。你能描述会发生什么吗?我的第一个猜测是Windows根据某些条件(例如,以小写优先的词汇顺序,反之亦然)选择了Windows(可能是无意中)选择了要读取/写入的文件。还是不允许任何文件被操纵?
trusktr 2014年

1
@trusktr系统会抱怨该文件已经存在,具体取决于所涉及的应用程序或代码,该文件将被静默忽略,并仅覆盖先前存在的文件。正如jpfx1342所评论的,此问题应视为未定义的行为。
凯西
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.