2011-08-26 15 views
19

Czy można bezpiecznie założyć, że w lokalnych i sieciowych ścieżkach plików NIE jest rozróżniana wielkość liter?Ścieżki plików w środowisku Windows nie są rozróżniane małe i wielkie litery?

+2

Zdefiniuj "bezpieczny". System NTFS _can_ może być skonfigurowany z nazwami plików z rozróżnianiem wielkości liter, ale mało kto to robi (a ci, którzy to robią, są zazwyczaj gotowi wziąć odpowiedzialność za łamanie programów). Ale dlaczego musisz to wiedzieć? –

+1

@Ken, nie ma nic śmierdzącego o 51%. Mnóstwo pytań - często najciekawszych - po prostu nie ma rozsądnych odpowiedzi. 51% pokazuje, że nie jest to użytkownik, który nie wie, do czego służy opisany znacznik; niezależnie od innych jego wad, wyraźnie podejmuje rozsądne decyzje dotyczące tego, co zaakceptować. –

+1

@Henning, nie zgadzam się. Jeśli zadasz 100 pytań, a na 50 z nich nikt nie odpowie, albo zadajesz wiele złych pytań, zadajesz pytania nie na temat, albo nie podążasz za nimi po rozwiązaniu samemu i odpowiadając na własne pytanie, aby przynosić korzyści innym. Ale oczywiście masz prawo do własnej opinii. :) –

Odpowiedz

16

Tak. Systemy plików Windows (lokalne), w tym NTFS, a także FAT i warianty, są rozróżniane wielkości liter (zwykle). Podstawowa implementacja sieciowego systemu plików może być rozróżniana z uwzględnieniem wielkości liter, jednak większość oprogramowania, które pozwala systemowi Windows na dostęp do niego (na przykład SMB), automatycznie rozróżnia wielkość liter w systemach plików, tak jak w przypadku systemu Windows.

Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją w sekcji Wikipedia article on filenames.

20

Rozróżnianie wielkości liter w systemie Windows jest faktycznie realizowane w sposobie otwierania plików przez aplikację. System NTFS może być systemem plików wrażliwym na wielkość liter i może z powodzeniem przechowywać pliki o identycznych nazwach różniących się tylko wielkością liter w tym samym katalogu.

W systemie Windows wszystkie pliki są ostatecznie otwierane za pośrednictwem interfejsu API CreateFile. - Jeśli flaga FILE_FLAG_POSIX_SEMANTICS zostanie przekazana do połączenia (a system plików, do którego uzyskiwany jest dostęp, jest rozróżniana wielkości liter), plik zostanie otwarty na podstawie dokładnej nazwy pasującej do nazwy . Jeśli nie zostanie przekazany FILE_FLAG_POSIX_SEMANTICS, system plików otworzy plik bez rozróżniania wielkości liter i otworzy jeden z plików o pasującej nazwie. Jeśli jest więcej niż jeden, nie jest zdefiniowany, który z nich jest faktycznie otwarty.

Większość wdrożeń środowiska wykonawczego C i C++ w systemie Windows nie zapewnia żadnego dostępu do tego mechanizmu i nigdy nie używa tej flagi, więc jedynym sposobem uzyskania dostępu do rozróżniania wielkości liter jest bezpośrednie użycie interfejsu API systemu Windows.

tl; dr - Twoje środowisko uruchomieniowe prawdopodobnie naraża twój system plików na wielkość liter lub zachowanie skrzynek. Możesz, jeśli korzystasz bezpośrednio z interfejsu API systemu Windows, uzyskać dostęp do obsługiwanych systemów plików w pełni sprawnie senstive.

Powiązane problemy