Czy wszystkie wersje systemu Windows nie rozróżniają wielkości liter?

18

Wiem, że system operacyjny Windows (ogólnie) nie uwzględnia wielkości liter. Czy dotyczy to wszystkich systemów operacyjnych Windows (od Windows 95 do Windows 7)? Czy istnieje konfiguracja rejestru, która rozróżnia wielkość liter w systemie Windows?

prosseek
źródło
2
Tak, podobnie jak wszystkie wersje MS-DOS, z których ten atrybut został odziedziczony. (Oczywiście MS-DOS nie zachował obudowy, więc sprawy potoczyły się do przodu :-).)
Richard
Bez względu na wielkość liter w odniesieniu do czego? Nazwy plików Hasła?
Peter Mortensen

Odpowiedzi:

15

Tak, dotyczy to wszystkich wersji systemu Windows. Nie ma sposobu, aby rozróżnić wielkość liter w systemie Windows. Pamiętaj jednak, że w niektórych aplikacjach, które zostały pierwotnie opracowane dla systemu Unix / Linux, a następnie przeniesione, rozróżniana jest wielkość liter. Na przykład w Cygwin rozróżniana jest wielkość liter. Takie zachowanie jest jednak niezwykle rzadkie.

nhinkle
źródło
7
„Nie ma sposobu, aby rozróżniać wielkość liter w systemie Windows”. nie jest całkiem dokładne. Istnieją sposoby na rozróżnianie wielkości liter w częściach systemu Windows, jak wyjaśniono w innych odpowiedziach.
sleske,
To prawda, że ​​z punktu widzenia użytkownika nazwy plików systemu Windows nie rozróżniają wielkości liter i nie ma (łatwego) sposobu, aby to zmienić.
sleske,
W niektórych aspektach systemu Windows rozróżniana jest wielkość liter, ale zależy to od możliwości innych komputerów. Zapisanie do udostępnionego katalogu, który naprawdę znajduje się na komputerze z systemem Linux, pozwoli na użycie nazw plików z rozróżnianiem wielkości liter. Wynika to z FILESYSTEM, jak powiedział @sleske, a nie dlatego, że „to Windows”
UtahJarhead,
1
To nie do końca prawda. W usłudze Windows Services dla systemu UNIX można rozróżniać wielkość liter w niektórych wersjach systemu Windows i niektórych wersjach komputerowych.
Keltari,
1
@Matt Ta odpowiedź jest nieprawidłowa (chociaż zamieszczono odpowiednie odpowiedzi). Po prostu nie włączono rozróżniania wielkości liter. superuser.com/questions/266110/... Muszę złożyć jeden plik o nazwie testfile i Testfile. /bIn/BaShnie działa w moim systemie.
William,
8

W rzeczywistości zależy to od podsystemu API / Windows, z którego korzystasz (twój program).

Jeśli używasz „ Windows API ” (standard dla aplikacji Windows), nazwy plików nie uwzględniają wielkości liter. Jeśli jednak korzystasz z podsystemu POSIX (inaczej Windows Services for Unix), możesz włączyć rozróżnianie wielkości liter.

Zobacz np. Ten artykuł MS Support: Włącz zachowanie z rozróżnianiem wielkości liter w Windows XP i podsystemie Interix lub SFU

Śleske
źródło
5

Cygwin próbuje emulować Uniksa. Dlatego musi dziedziczyć rozróżnianie wielkości liter, aby nie przerywać aplikacji. Sam system Windows nie rozróżnia wielkości liter. Chodzi o system plików. Możesz przeczytać więcej na ten temat w systemie plików, systemach plików w systemie Microsoft Windows (Wikipedia).

Mijndert Stuij
źródło
Poprawny. W systemie plików NTFS rozróżniana jest wielkość liter, jest ono wyłączone tylko w systemie Windows. Można to włączyć, ale jest to wyjątkowo… unsupportedtak powiem.
Apache
To jest skierowane do OP, nie do MijndertStuij, ale nie chciałem nadepnąć mu na palce. Zasługuje na tego przedstawiciela. Niezależnie od tego, czy jest to FAT (jako oryginalne wersje MS-DOS i Windows), czy NTFS (Windows NT i nowsze wersje), wszystkie nie uwzględniają wielkości liter. Zauważysz te różnice nieco, jeśli zapiszesz pliki w systemie plików Linux na Sambie (kuzyn udostępniania plików i drukarek).
UtahJarhead
Ze strony NTFS Wikipedii: Dozwolone znaki w nazwach plików. - W przestrzeni nazw Posix, dowolna jednostka kodu UTF-16 (rozróżnia małe i wielkie litery) oprócz U + 0000 (NUL) i / (ukośnik). W przestrzeni nazw Win32, jakakolwiek jednostka kodu UTF-16 (bez rozróżniania wielkości liter) oprócz U + 0000 (NUL) / (ukośnik) \ (ukośnik odwrotny): (dwukropek) * (gwiazdka)? (Znak zapytania) „(cytat) <(mniej niż)> (większy niż) i | (rura) [5]
UtahJarhead
Spróbuj uruchomić /bIn/BaShw Cygwin i powiedz mi, że wielkość liter ma znaczenie.
Matt
5

Microsoft dodał nową flagę (atrybut) uwzględniającą wielkość liter, którą można zastosować do katalogów (folderów) NTFS. W przypadku katalogów, w których ta flaga jest ustawiona (włączona), we wszystkich operacjach na plikach w tym katalogu rozróżniana jest wielkość liter, niezależnie od tego, czy określono FILE_FLAG_POSIX_SEMANTICS. Oznacza to, że jeśli masz dwa pliki, które różnią się tylko wielkością liter w katalogu oznaczonym jako rozróżniana wielkość liter, wszystkie aplikacje będą mogły uzyskać do nich dostęp.

Począwszy od wersji 17107 systemu Windows 10 , Microsoft dodał możliwość wyświetlania i modyfikowania tej flagi do polecenia fsutil.exe.

Aby sprawdzić, czy w katalogu rozróżniana jest wielkość liter, uruchom następujące polecenie:

fsutil.exe file queryCaseSensitiveInfo <path>

Aby oznaczyć katalog jako rozróżniający małe lub małe lub duże litery:

fsutil.exe file setCaseSensitiveInfo <path> enable
fsutil.exe file setCaseSensitiveInfo <path> disable
Alexander Popov
źródło
4

To jest stąd . Możesz ustawić HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitivewartość rejestru na 0sugerowaną przez innych autorów. Utwórz plik o add.regnastępującej treści i uruchom go.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel]
"obcaseinsensitive"=dword:00000000

Następnie użyj Cygwin do pracy z nazwami plików, w których rozróżniana jest wielkość liter.

Aby to zrobić, musisz zamontować systemy plików NTFS z posix=1opcją w swoim /etc/fstab, jak sugeruje ten artykuł . Oto fragment mojego fstab:

none                    /cygdrive       cygdrive        binary,posix=1,user             0 0
C:                      /cygdrive/c     ntfs            binary,posix=1,user,auto        0 0
C:/Users                /home           ntfs            binary,posix=1,user,auto        0 0

Po dokonaniu powyższych jest zrobione, będziesz w stanie radzić sobie z wielkość liter nazw korzystających bash, mc, gitetc.

Pamiętaj, aby zrestartować komputer po edycji obu.

William
źródło
3

Barfieldmv ma rację. W systemie plików rzeczywiście rozróżniana jest wielkość liter, a pliki są przechowywane z odpowiednią wielkością liter. Warstwa dostępu do plików jest odpowiedzialna za usunięcie sprawy podczas dopasowywania plików do nowych deskryptorów plików

o wiele bardziej
źródło
1
Czy możesz podać dalsze szczegóły dotyczące tego, jak działa ta abstrakcja między systemem plików a użytkownikiem (tj. Podać krok po kroku)? Powinieneś również odpowiedzieć na aktualne pytania operatora dotyczące poprzednich systemów operacyjnych oraz czy można wymusić zachowanie z rozróżnianiem wielkości liter.
MaQleod
W dzisiejszych czasach nie będę w stanie udzielić pełnej odpowiedzi, ponieważ jestem wielkim kujonem Linuksa .. Jednak mogę zaoferować następujące. Usługi Windows dla systemu Unix korzystają z tych samych systemów plików, co system operacyjny, w szczególności nie wykorzystując interfejsów API, które umożliwiają rozróżnianie wielkości liter. Zobacz: support.microsoft.com/kb/817921, aby uzyskać informacje na temat tego, jak Case „Preserving” jest taki sam jak Case „Sensitive”, jednak wspólne warstwy dostępu pozwalają na Case „Ignorance” :)
whardier
Można powiedzieć, że w systemie Windows nie jest rozróżniana wielkość liter, ale po prostu rozróżniana jest wielkość liter. Oznacza to, że (Windows) wie, czy litera jest pisana wielkimi lub małymi literami i akceptuje oba z nich. Nie odczytuje ani jednego, ani drugiego jako błędu.
IGRACH