Was ist das erwartete Standardverhalten, wenn Windows auf zwei Dateien mit demselben Namen und unterschiedlicher Groß- / Kleinschreibung in einer NTFS-Partition stößt?


16

Es ist einfach, zwei Dateien von Linux auf eine NTFS-Partition zu schreiben, und beide Dateien enthalten dieselben Buchstaben, jedoch mit unterschiedlichen Groß- und Kleinschreibung, z. B. some_file.txt und Some_File.txt. Linux unterscheidet sie.

Wie geht Windows damit um?


1
Persönlich würde ich aufgrund aller Faktoren nur sagen, dass es undefiniertes Verhalten verursacht. Wenn Windows das Verhalten in diesem Fall nicht definiert, ist es per Definition undefiniert. Wenn Windows tut das Verhalten definieren, würde ich immer noch als nicht definiertes Verhalten behandeln, weil ich bezweifle ernsthaft , dass alle Programme diese konsequent behandeln.
jpfx1342

Antworten:


20

Die MS-DOS-, WOW- und Win32-Persönlichkeiten geben die erste übereinstimmende Datei zurück. Für einige Anwendungen und APIs, Fall- Unempfindlichkeit wird erzwungen (zB MS-DOS kann einfach nicht damit umgehen). Die POSIX - Persönlichkeit wird differenzieren und Groß- und Kleinschreibung standardmäßig (wenn Sie die UNIX - Tools installiert haben, zum Beispiel). Die systemeigene Windows NT-Eingabeaufforderung zeigt beide an. Abhängig von den Einstellungen (ObCaseInsensitive) und den von den Tools verwendeten APIs greifen Sie jedoch nur auf die erste zu, die gefunden wird.

Siehe Microsoft Technet - Artikel Dateinamen sind Case Sensitive auf NTFS - Volumes (KB100625) und auch eine ausführliche Diskussion über die Feinheiten der Groß- und Kleinschreibung in den verschiedenen NT - Subsysteme: Verstehen Groß- und Kleinschreibung in Windows: obcaseinsensitive, FILE_CASE_SENSITIVE_SEARCH

Insbesondere steuert der ObCaseInsensitive- Wert die Groß- und Kleinschreibung des gesamten NT Object Manager:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Wenn der Wert auf 0 gesetzt ist, wird der Objektmanager im Modus "Groß- und Kleinschreibung beachten" ausgeführt.
  • Bei der Einstellung 1 wird der Objektmanager im Modus ohne Berücksichtigung der Groß- und Kleinschreibung ausgeführt.
  • Wenn nicht angegeben, werden NT 5.1 (Windows XP) und spätere Editionen standardmäßig im Modus ohne Berücksichtigung der Groß- und Kleinschreibung ausgeführt.
  • obcaseinsensitive hat in NT 5.0 (Windows 2000) und früheren Versionen von NT, die immer im case sensitive-Modus ausgeführt werden, keine Bedeutung.

Cygwin sollte zu diesem Zeitpunkt die zugrunde liegenden / effektiven Einstellungen für die Groß- und Kleinschreibung übernehmen.

Die verwandte SuperUser-Frage Wie konfiguriere ich die Groß- und Kleinschreibung von Ordnernamen in Windows 7? Im TechNet-Artikel " Groß- und Kleinschreibung für Datei- und Ordnernamen konfigurieren" finden Sie weitere Informationen zum Aktivieren der Groß- und Kleinschreibung für Dateien und Ordner in NT, wenn Sie diese Situation regelmäßig behandeln müssen.

Zusätzliche Ressourcen für Tools / den Zugriff auf NTFS / NFS-Volumes, bei denen die Groß- und Kleinschreibung beachtet wird:


Wenn zwei Dateien vorhanden sind, One.txt und ONE.txt, welche Datei würde "zuerst übereinstimmen", wenn ich one.txt zur Verfügung stelle? Gibt es Regeln für die "erste passende Datei"?
Trusktr

1
Es basiert wahrscheinlich auf der internen Dateireihenfolge in einem Verzeichnis. Ich werde es morgen versuchen, wenn du es genau wissen willst.
Daniel B

2
Welches zuerst kommt, entscheidet allein die Reihenfolge, in der es im Verzeichnis steht. Dies ist NICHT unbedingt die Reihenfolge, in der sie erstellt werden. Und es kann sich ändern, wenn entweder die Datei geändert oder das Verzeichnis aktualisiert wird. (Chkdsk, Defrag, Löschen, Kopieren, Verschieben anderer Dateien in diesem Ordner kann die Reihenfolge ändern.)
Tonny

1
@trusktr Nun, anscheinend gibt es doch eine Art Ordnung. Ich habe mehrere Dateisätze (unter Verwendung von NTFS-3G) mit unterschiedlichen Groß- und Kleinschreibungen und in unterschiedlichen Reihenfolgen erstellt. Windows (oder genauer gesagt Notepad) wählt die Datei unabhängig von der Erstellungsreihenfolge immer mit einem Großbuchstaben aus. moregibt aber nur ein Fragezeichen zurück.
Daniel B

1
@trusktr Es folgt der Reihenfolge der INDX-Einträge im B + Tree des Verzeichnisses. Dieser Baum wird nach Design sortiert gehalten, kann jedoch je nach NTFS-Treiber leicht variieren. Es wird (OnCaseInsensitive = 0, Win32 / DOS / WOW API) die erste Übereinstimmung sein, wenn der (sortierte) Baum des angegebenen Namens und des INDX-Eintragsnamens durchsucht wird. NTFS verwendet Ordnungsvergleiche, daher sollte immer Großbuchstaben vor Kleinbuchstaben gefunden werden. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon

2

Das tut es nicht. Es betrachtet Unterschiede zwischen Groß- und Kleinschreibung, aber ansonsten exakt dieselben Namen als dieselbe Datei.

Sie können dies testen, indem Sie eine Datei in Kleinbuchstaben erstellen und dann eine weitere mit nur einem Buchstaben in Großbuchstaben erstellen.


Ich habe nicht die Umgebung, um das jetzt zu testen. Ich habe momentan nur OS X. Können Sie beschreiben, was passiert? Meine erste Vermutung wäre, dass Windows (möglicherweise versehentlich) anhand einiger Kriterien (z. B. Reihenfolge der Wörter in Kleinbuchstaben oder umgekehrt) auswählt, welche Datei gelesen / geschrieben werden soll. Oder kann keine Datei manipuliert werden?
Trusktr

1
@trusktr Das System beschwert sich, dass die Datei je nach Anwendung oder Code bereits vorhanden ist. Dies wird unbemerkt ignoriert und überschreibt einfach die bereits vorhandene Datei. Wie jpfx1342 kommentierte , sollte dieses Problem als undefiniertes Verhalten behandelt werden.
Casey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.