Программист на моей работе, который всю жизнь использовал Linux, ругал Windows за наличие файловой системы без учета регистра (среди прочего), что, по его словам, является наихудшей возможной идеей и никогда не принесет пользы. Я сказал, что это только потому, что он привык к файловым системам, чувствительным к регистру, и что гораздо более разумно иметь файловую систему без учета регистра (часть моего рассуждения состоит в том, что меня зовут David
, но если вы упомянули меня david
Я бы все равно знал, что вы имели в виду меня, и то же самое должно относиться к файлам). Затем он объяснил свою позицию, заявив, что файловая система без учета регистра должна подвергаться снижению производительности.
Так вот мне интересно ... как же регистронезависимом доступ к файлам файловой системы? Позвольте мне попытаться объяснить, что я думаю:
Скажем, у вас есть чувствительная к регистру файловая система (и ядро ОС и т.д.), Так что на практике, если каталог существует с именем exampleDir
, я должен в точности ввести cd exampleDir
для cd. Если я cd exampledir
, я получу сообщение об ошибке, что каталог не существует. Мне кажется, это простой случай. Когда я набираю команду, файловая система может просто взять введенные мной точные символы (игнорируя то, что может сделать ядро, чтобы добавить текущий путь к рабочему каталогу в строку и т.д.) И начать просматривать список доступных имен файлов, выполняя прямой сравнить по каждому имени; например:
for(var i=0;i<files.length;i++) {
if(filename == files[i]) return true;
}
Теперь интересная часть, нечувствительная к регистру файловая система (при условии сохранения регистра, как в Windows). С практической точки зрения, если существует каталог с именем exampleDir
, я могу набрать cd exampleDir
или cd eXamPleDIr
и мне все равно удастся попасть в эту папку. То, что я действительно хочу знать, - то, на что похож код, чтобы достигнуть этого. Для сохранения регистра имя каталога должно храниться вместе с регистром. Значит ли это, что вам нужно делать два преобразования в нижний или верхний регистр каждый раз, когда вы хотите получить доступ к файлу по имени файла? Насколько сильно это сказывается на производительности? Существуют ли уловки, используемые для уменьшения снижения производительности при использовании файловой системы без учета регистра? Вот как я представляю, что код файловой системы должен выглядеть так:
for(var i=0;i<files.length;i++) {
if(toLowercase(filename) == toLowercase(files[i])) return true;
}
Пожалуйста, обратите внимание: так как кажется, что это не было ясно из моего вопроса, я абсолютно не спрашиваю, какой тип лучше, и при этом я не спрашиваю, каковы преимущества и недостатки. Я только спрашиваю, как (с технической точки зрения) файловая система без учета регистра учитывает тот факт, что люди могут вводить имя файла в случайном регистре.