Apa perilaku standar yang diharapkan ketika Windows menemukan dua file dengan nama yang sama tetapi dengan huruf besar berbeda di partisi NTFS?

16

Sangat mudah untuk menulis dua file ke partisi NTFS dari Linux, dan memiliki kedua file tersebut berisi huruf yang sama tetapi dengan kasus yang berbeda, misalnya some_file.txt dan Some_File.txt. Linux membedakannya.

Bagaimana Windows menangani ini?

trusktr
sumber
1
Secara pribadi, karena semua faktor yang terlibat, saya hanya akan mengatakan bahwa itu menyebabkan perilaku yang tidak terdefinisi. Jika Windows tidak mendefinisikan perilaku dalam kasus ini, maka menurut definisi, itu tidak terdefinisi. Jika Windows tidak menentukan perilaku, saya masih akan memperlakukannya sebagai perilaku undefined, karena saya benar-benar ragu bahwa semua program menangani hal ini secara konsisten.
jpfx1342

Jawaban:

20

Kepribadian MS-DOS, WOW, dan Win32 akan mengembalikan file yang cocok pertama. Untuk beberapa aplikasi dan API, kasus- ketidakpekaan adalah ditegakkan (misalnya, MS-DOS tidak bisa menghadapinya). Kepribadian POSIX akan membedakan dan case case sensitif secara default (jika Anda memiliki alat UNIX diinstal, misalnya). Prompt perintah Windows NT asli akan menampilkan keduanya tetapi, tergantung pada pengaturan (ObCaseInsensitive) dan API mana yang digunakan oleh alat, hanya mengakses yang pertama ditemukan.

Lihat artikel Microsoft Technet Nama file Case Sensitive pada Volume NTFS (KB100625) dan juga pembahasan terperinci tentang seluk-beluk sensitivitas kasus di berbagai subsistem NT: Memahami sensitivitas case di Windows: obcaseinsensitive, FILE_CASE_SENSITIVE_SEARCH

Secara khusus, nilai ObCaseInsensitive mengontrol sensitivitas case dari seluruh Object Manager NT:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Ketika diatur ke 0, manajer objek berjalan dalam mode case sensitif.
  • Ketika diatur ke 1, manajer objek berjalan dalam mode case-sensitive.
  • Ketika tidak ditentukan, NT 5.1 (Windows XP) dan edisi yang lebih baru default untuk berjalan dalam mode case-sensitive.
  • obcaseinsensitive tidak memiliki arti dalam NT 5.0 (Windows 2000) dan versi sebelumnya dari NT, yang selalu berjalan dalam mode case sensitive.

Cygwin harus mengambil pengaturan sensitivitas kasus yang mendasarinya / efektif pada saat ini.

Pertanyaan SuperUser terkait Bagaimana cara mengkonfigurasi sensitivitas case name folder di Windows 7? dan artikel TechNet Mengkonfigurasi Sensitivitas Huruf untuk Nama File dan Folder memiliki informasi lebih lanjut tentang mengaktifkan sensitivitas huruf penuh untuk file dan folder di NT jika Anda perlu menangani situasi ini secara teratur.

Sumber daya tambahan untuk perkakas / akses peka huruf besar / kecil ke volume NTFS / NFS:

Maxx Daymon
sumber
Jika ada dua file, One.txt dan ONE.txt, file mana yang akan "cocok dulu" jika saya menyediakan one.txt? Apakah ada aturan yang akan menjadi "file pencocokan pertama"?
trusktr
1
Itu mungkin didasarkan pada urutan file internal dalam direktori. Saya akan mencobanya besok, jika Anda ingin tahu persis.
Daniel B
2
Yang pertama adalah murni ditentukan oleh urutan di mana mereka muncul di direktori. Ini BUKAN dengan sendirinya urutan pembuatannya. Dan itu dapat berubah jika salah satu file diubah atau sutradara diperbarui. (Chkdsk, Defrag, menghapus, menyalin memindahkan file lain di folder itu semua dapat mengubah urutan.)
Tonny
1
@trusktr Ya, rupanya ada beberapa jenis pesanan. Saya membuat beberapa set file (menggunakan NTFS-3G), masing-masing dengan kapitalisasi berbeda dan dalam urutan yang berbeda. Windows (atau, lebih tepatnya, Notepad) selalu mengambil file yang dimulai dengan huruf besar, terlepas dari urutan pembuatannya. morehanya mengembalikan tanda tanya.
Daniel B
1
@trusktr Ini akan mengikuti urutan entri INDX dari B + Tree direktori. Pohon ini disimpan menurut desain, tetapi dapat sedikit berbeda tergantung pada driver NTFS. Ini akan (OnCaseInsensitive = 0, Win32 / DOS / WOW API) menjadi pertandingan pertama saat berjalan pohon (diurutkan) dari nama yang ditentukan dan nama entri INDX. NTFS menggunakan perbandingan ordinal, jadi huruf besar harus selalu ditemukan sebelum huruf kecil. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon
2

Tidak. Itu mempertimbangkan perbedaan kasus tetapi sebaliknya nama yang sama persis menjadi file yang sama.

Anda dapat menguji ini dengan membuat file di semua huruf kecil, kemudian membuat yang lain dengan hanya satu huruf di atasnya dan itu akan mengeluh.

Casey
sumber
Saya tidak punya lingkungan untuk mengujinya sekarang. Saya hanya memiliki OS X saat ini. Bisakah Anda menggambarkan apa yang terjadi? Dugaan pertama saya adalah bahwa Windows akan memilih (mungkin secara tidak sengaja) file mana yang akan dibaca / ditulis oleh beberapa kriteria (mis. Urutan leksikal dengan huruf kecil diutamakan, atau sebaliknya). Atau apakah itu tidak memungkinkan file dimanipulasi apa pun?
trusktr
1
@trusktr Sistem mengeluh bahwa file sudah ada, tergantung pada aplikasi atau kode yang terlibat, ini akan diabaikan secara diam-diam dan cukup menimpa file yang sudah ada sebelumnya. Seperti jpfx1342 berkomentar , masalah ini harus diperlakukan sebagai perilaku yang tidak terdefinisi.
Casey