Programista w mojej pracy, który przez całe życie korzystał z Linuksa, krytykował Windows za posiadanie systemu plików bez rozróżniania wielkości liter (między innymi), co według niego jest najgorszym możliwym pomysłem i nigdy nie może być korzystne. Powiedziałem, że dzieje się tak tylko dlatego, że był przyzwyczajony do systemów plików z rozróżnianiem wielkości liter, i że rozsądniej jest mieć system plików bez rozróżniania wielkości liter (część mojego rozumowania polega na tym, że mam na imię David
, ale jeśli odniosłeś się do mnie david
, zrobiłbym to wciąż wiem, że miałeś na myśli mnie i to samo powinno dotyczyć plików). Następnie wyjaśnił swoją pozycję, stwierdzając, że system plików bez rozróżniania wielkości liter musi zostać obciążony spadkiem wydajności.
Zastanawiam się więc ... w jaki sposób system plików bez rozróżniania wielkości liter ma dostęp do plików? Pozwól mi wyjaśnić, co myślę:
Załóżmy, że masz system plików z rozróżnianiem wielkości liter (i jądra systemu operacyjnego itp.), Tak więc w praktyce, jeśli istnieje katalog o nazwie o nazwie exampleDir
, muszę wpisać w nim dokładnie cd exampleDir
cd. Jeśli piszę cd exampledir
, powinienem otrzymać błąd, że katalog nie istnieje. Wydaje mi się, że to prosta sprawa. Kiedy wpisuję polecenie, system plików może po prostu pobrać dokładnie te znaki, które wpisałem (ignorując to, co jądro może zrobić, aby dodać bieżącą ścieżkę katalogu roboczego do łańcucha itd.) I rozpocząć przeglądanie listy dostępnych nazw plików, wykonując bezpośrednie porównaj każde imię; na przykład:
for(var i=0;i<files.length;i++) {
if(filename == files[i]) return true;
}
Teraz interesująca część : system plików bez rozróżniania wielkości liter (zakładając zachowanie wielkości liter , jak w systemie Windows). W praktyce, jeśli istnieje katalog o nazwie o nazwie exampleDir
, mógłbym wpisać cd exampleDir
lub cd eXamPleDIr
i nadal udałoby mi się dostać do tego folderu. Naprawdę chcę wiedzieć, jak wygląda kod, aby to osiągnąć. Aby zachować wielkość liter, nazwa katalogu musi być przechowywana z jej wielkością. Czy to oznacza, że za każdym razem, gdy chcesz uzyskać dostęp do pliku po nazwie pliku , musisz wykonać dwie konwersje małymi lub dużymi literami? Jak duży wpływ na wydajność ma to przełożenie? Czy są jakieś sztuczki, które zmniejszają spadek wydajności wynikający z używania systemu plików bez rozróżniania wielkości liter? Tak wyobrażam sobie kod systemu plików, który musiałby wyglądać:
for(var i=0;i<files.length;i++) {
if(toLowercase(filename) == toLowercase(files[i])) return true;
}
Uwaga: Ponieważ wydaje się, że nie było to jasne z mojego pytania, absolutnie nie pytam, który typ jest lepszy, ani nie pytam o zalety i wady. Mam tylko pytanie, jak (pod względem technicznym) bez uwzględniania wielkości liter zajmuje system plików z faktu, że ludzie mogą wpisać nazwę pliku z losowym przypadku.