Hành vi dự kiến ​​mặc định khi Windows gặp hai tệp có cùng tên nhưng viết hoa khác nhau trong phân vùng NTFS là gì?


16

Thật dễ dàng để ghi hai tệp vào phân vùng NTFS từ Linux và có cả hai tệp đó chứa cùng một chữ cái nhưng với trường hợp khác nhau, ví dụ: some_file.txt và some_File.txt. Linux phân biệt chúng.

Làm thế nào để Windows xử lý những điều này?


1
Cá nhân, vì tất cả các yếu tố liên quan, tôi sẽ chỉ nói rằng nó gây ra hành vi không xác định. Nếu Windows không xác định hành vi trong trường hợp này, thì theo định nghĩa, nó không được xác định. Nếu Windows không xác định hành vi, tôi vẫn sẽ đối xử với nó như hành vi không xác định, bởi vì tôi nghiêm túc nghi ngờ rằng tất cả các chương trình xử lý này một cách nhất quán.
jpfx1342

Câu trả lời:


20

Các tính cách MS-DOS, WOW và Win32 sẽ trả về tệp phù hợp đầu tiên. Đối với một số ứng dụng và API, phân biệt chữ hoa chữ thường được thi hành (ví dụ: MS-DOS không thể xử lý được). Tính cách POSIX sẽ phân biệt và phân biệt chữ hoa chữ thường theo mặc định (ví dụ: nếu bạn đã cài đặt các công cụ UNIX). Dấu nhắc lệnh Windows NT gốc sẽ hiển thị cả hai, nhưng tùy thuộc vào cài đặt (ObCaseInsensitive) và API mà công cụ sử dụng, chỉ truy cập vào cái đầu tiên mà nó tìm thấy.

Xem bài viết Microsoft Technet Tên tệp là phân biệt chữ hoa chữ thường trên các tệp NTFS (KB100625) và cũng là một cuộc thảo luận chi tiết về sự tinh tế của phân biệt chữ hoa chữ thường trong các hệ thống con NT khác nhau: Hiểu độ nhạy trường hợp trong Windows: obcaseinsensitive, FILE_CASE_SENSITIVE_SEARCH

Cụ thể, giá trị ObCaseInsensitive kiểm soát độ nhạy trường hợp của toàn bộ Trình quản lý đối tượng NT:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • Khi được đặt thành 0, trình quản lý đối tượng chạy trong chế độ phân biệt chữ hoa chữ thường.
  • Khi được đặt thành 1, trình quản lý đối tượng chạy trong trường hợp chế độ không nhạy.
  • Khi không được chỉ định, NT 5.1 (Windows XP) và các phiên bản mới hơn mặc định sẽ chạy trong chế độ không nhạy.
  • obcaseinsensitive không có ý nghĩa trong NT 5.0 (Windows 2000) và các phiên bản trước của NT, luôn chạy trong chế độ nhạy.

Cygwin nên chọn cài đặt phân biệt chữ hoa chữ thường / hiệu quả vào thời điểm này.

Câu hỏi SuperUser liên quan Làm cách nào để định cấu hình độ nhạy trường hợp tên thư mục trong Windows 7? và bài viết TechNet Cấu hình Độ nhạy trường hợp cho Tên tệp và thư mục có thêm thông tin về việc bật độ nhạy trường hợp đầy đủ cho các tệp và thư mục trong NT nếu bạn cần xử lý tình huống này thường xuyên.

Tài nguyên bổ sung về công cụ phân biệt chữ hoa chữ thường / quyền truy cập vào khối lượng NTFS / NFS:


Nếu hai tệp tồn tại, One.txt và ONE.txt, tệp nào sẽ "khớp trước" nếu tôi cung cấp one.txt? Có quy tắc nào sẽ là "tập tin phù hợp đầu tiên" không?
trusktr

1
Có lẽ nó dựa trên thứ tự tập tin nội bộ trong một thư mục. Tôi sẽ thử nó vào ngày mai, nếu bạn muốn biết chính xác.
Daniel B

2
Cái nào đầu tiên được quyết định hoàn toàn theo thứ tự xuất hiện trong thư mục. Điều này KHÔNG nhất thiết là thứ tự mà chúng được tạo ra. Và nó có thể thay đổi nếu một trong hai tập tin được sửa đổi hoặc directoy được cập nhật. (Chkdsk, Chống phân mảnh, xóa, sao chép di chuyển các tệp khác trong thư mục đó đều có thể thay đổi thứ tự.)
Tonny

1
@trusktr Vâng, rõ ràng là có một số loại trật tự, sau khi tất cả. Tôi đã tạo nhiều bộ tệp (sử dụng NTFS-3G), mỗi bộ có viết hoa khác nhau và theo thứ tự khác nhau. Windows (hay chính xác hơn là Notepad) luôn chọn tệp bắt đầu bằng chữ in hoa, bất kể thứ tự tạo. morechỉ trả về một dấu hỏi
Daniel B

1
@trusktr Nó sẽ theo thứ tự các mục INDX của B + Tree của thư mục. Cây này được sắp xếp theo thiết kế, nhưng có thể thay đổi một chút tùy thuộc vào trình điều khiển NTFS. Nó sẽ (OnCaseInsensitive = 0, API Win32 / DOS / WOW) là kết hợp đầu tiên trong khi đi trên cây (được sắp xếp) của tên được chỉ định và tên mục nhập INDX. NTFS sử dụng so sánh thứ tự, vì vậy hoa nên luôn luôn được tìm thấy trước chữ thường. (AZ = 0041-005A, az = 0061-007A)
Maxx Daymon

2

Nó không. Nó xem xét các trường hợp khác nhau nhưng tên khác chính xác là cùng một tệp.

Bạn có thể kiểm tra điều này bằng cách tạo một tệp bằng tất cả chữ thường, sau đó tạo một tệp khác chỉ có một chữ cái ở trên và nó sẽ khiếu nại.


Tôi không có môi trường để kiểm tra điều đó ngay bây giờ. Tôi chỉ có OS X vào lúc này. Bạn có thể mô tả những gì xảy ra? Dự đoán đầu tiên của tôi sẽ là Windows chọn (có thể vô tình) tập tin nào để đọc / ghi theo một số tiêu chí (ví dụ: thứ tự từ vựng với chữ thường được ưu tiên hoặc ngược lại). Hoặc nó không cho phép bất kỳ tập tin nào bị thao túng?
trusktr

1
@trusktr Hệ thống phàn nàn rằng tệp đã tồn tại, tùy thuộc vào ứng dụng hoặc mã liên quan, điều này sẽ âm thầm bị bỏ qua và chỉ đơn giản ghi đè lên tệp có sẵn. Như jpfx1342 đã nhận xét , vấn đề này nên được coi là hành vi không xác định.
Casey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.