В качестве имени файла можно использовать последовательность символов
Файл может быть сколь угодно большим и сколь угодно малым. Если в файле не хранится ни одного байта данных, этот файл называется пустым.Физическим аналогом файла является безразмерная папка для бумаг. В ней может не быть ни одного листочка, но папка от этого не перестанет быть информационным контейнером — её можно хранить, располагать внутри других контейнеров, она может иметь собственный адрес. Когда в эту папку начнут поступать листы с данными, в папке образуется коллекция объектов. Все листы получат общий адрес — адрес папки, но при этом каждый лист сохранит за собой ещё и тот порядковый номер, под которым он поступил в коллекцию.
На компьютере файл — это безразмерная последовательность байтов. Каждый байт имеет в файле позицию (порядковый номер) от начала файла. Все байты последовательности имеют общее имя (имя файла) и общий адрес — путь доступа к файлу.
Файлы данных нужны нам не просто для порядка, а для того, чтобы с ними могли работать автоматические программные средства. Поэтому имя файла должно быть записано не как попало, а именно так, как требуют эти самые средства. На разных компьютерах, работающих под управлением разных операционных систем, правила
записи имён файлов могут различаться. Мы рассмотрим соглашения, принятые для компьютеров платформы IBM PC.
СОГЛАШЕНИЕ 8.3
Это соглашение было принято в начале 80-х годов прошлого века при создании операционной системы MS-DOS, но широко используется и сегодня. Согласно соглашению 8.3 имя файла строится по следующим правилам.
• Имя файла состоит из двух частей, разделяемых при записи точкой.
• Первая часть содержит от 1 до 8 символов, вторая — не более трёх (может вообще отсутствовать).
• Часть имени файла, стоящую после точки, называют расширением имени.
• В имени файла разрешается использовать латинские буквы и цифры (русские буквы недопустимы). Все буквы автоматически преобразуются к верхнему регистру.
• Использовать в имени файла пробелы, знаки препинания и специальные символы не разрешается.
Расширение имени файла принято использовать в качестве признака формата записи данных. Некоторые операционные системы (например, Windows) используют расширение имени файла для автоматического выбора программы, которой этот файл следует открывать. Вот некоторые примеры расширений имён файлов.
• .AVI — файл видеозаписи. Может быть закодирован как угодно (как именно, указано внутри файла). Для воспроизведения на компьютере может потребоваться программа-кодек (какая именно, указано внутри файла).
• .BMP — файл с изображением, записанным в формате кодирования BMP. Предназначен для воспроизведения изображения на экране компьютера.
• .DOC — форматированный (оформленный) текстовый документ, предназначенный для печати на принтере. Может содержать рисунки, таблицы, видео- и аудиоклипы и другие информационные объекты.
• .ЕХЕ — программа (файл содержит команды и данные).
• .GIF - малоцветное изображение (до 256 цветов), закодированное табличным способом и сжатое по технологии LZW.
• . НТМ — форматированный электронный документ, предназначенный для просмотра на экране.
• .JPG — многоцветное (более 16 млн. цветов) изображение, закодированное и сжатое по технологии JPEG.
• .MPG —г файл видеозаписи. Закодирован по технологии MPEG.
• .МР2 — файл видеозаписи. Закодирован по технологии MPEG 2.
• .МРЗ — файл звукозаписи. Закодирован по технологии MPEG I Layer 3.
• .МР4 — файл видеозаписи. Закодирован по технологии MPEG 4.
• TIP - рисунок (изображение), предназначенный для печати. Записан в формате кодирования TIFF (как правило, сжатый по технологии LZW).
• .ТХТ — неформатированный текстовый документ (поток текста). В начале файла может стоять код, сигнализирующий о том, какая кодировка использована.
• .WAV — файл звукозаписи. Может быть закодирован как угодно (указано внутри файла). Для воспроизведения на компьютере может потребоваться программа-кодек (указана внутри файла).
ДЛИННЫЕ ИМЕНА ФАЙЛОВ
При работе в рамках соглашения 8.3 довольно трудно давать файлам понятные имена, описывающие их содержание. Поэтому современные операционные системы допускают использование так называемых «длинных имен файлов». Правила записи длинных имен гибче, чем правила соглашения 8.3.
• Длина имени не может превосходить 255 символов.
• В имени файла можно использовать символы национальных алфавитов, в том числе русского, и символы верхнего и нижнего регистров.
• Разрешается использовать в имени файла пробелы, точки, иные знаки препинания и математические символы, кроме следующих девяти: < >\ ? / * + ; :
• Расширением имени считается последовательность символов, находящаяся за последней точкой в имени файла. Расширение имени может содержать более трех символов.
«Длинными» считаются имена файлов, которые удовлетворяют правилам записи длинных имён, но не соответствуют соглашению 8.3.
Для удобства хранения и поиска файлы группируют. Полученную группу размещают в контейнерных объектах — каталогах.Каталоги тоже можно группировать и размещать в каталогах более высокого уровня. Таким образом, каталог — это информационный контейнер, обладающий собственным именем и предназначенный для хранения файлов и каталогов.
Правила записи имён каталогов те же, что и правила записи имён файлов. На практике часто принято не указывать расширения имён каталогов, потому что в одном каталоге могут храниться файлы с данными разных типов.
Полное имя файла
Файл — информационный объект. Его главная функция - хранение данных. Имя файла — его основное свойство, потому что оно выполняет функцию адреса и дает возможность доступа к данным, хранящимся в файле. Мы знаем, что основные свойства информационных объектов должны быть уникальными, иначе объекты становятся неразличимыми. Отсюда вывод: имя файла должно быть уникальным.При организации хранения данных должны быть предусмотрены специальные меры, чтобы в одной системе хранения данных не могло быть двух файлов с одинаковыми именами.
На современных компьютерах хранятся сотни тысяч файлов. Следить за тем, чтобы все они имели разные имена, весьма трудно. Проблема решается с помощью каталогов. Следует различать собственное имя файла— имя, данное ему при записи в какой-либо каталог, — и полное имя файла,которое образуется сочетанием собственного имени и пути доступа, который ведёт к файлу в избранной системе хранения. Это даёт возможность использовать одинаковые собственные имена для разных файлов при условии, что они будут размещены в разных каталогах. Например, файлы, имеющие собственное имя «Письмо_013.ТХТ» могут храниться в разных каталогах и иметь разные полные имена:
При записи полного имени файла имена каталогов, входящие в путь доступа, разделяют с помощью специального символа. Для компьютеров, работающих под управлением операционных систем MS-DOS и Windows, в качестве разделителя принята обратная косая черта « \ ».
На компьютерах, работающих под управлением других операционных систем, в качестве разделителя часто используют обычную косую черту «/». В Интернете документы хранятся на компьютерах самых разных систем. При обращении к документам Интернета принято при указании пути доступа использовать обычную косую черту «/».
Операционные системы предоставляют средства для указания не одного, а сразу группы существующих в том или ином каталоге файлов путем задания так называемых шаблонов.
Шаблоном (образцом) является составное имя файла, в полях имени и/или расширения которого используются символы-заменители (глобальные символы). Шаблон обозначает не единственный файл, а группу существующих файлов, составные имена которых, сопоставляются с данным шаблоном, т.е. подходят под образец. Область действия образца ограничивается содержимым определенного каталога.
Используются символы-заменители ? и *.
Заменитель ? обычно указывает на любой (но единственный) символ в данной позиции. Однако если заменитель ? записан последним в поле имени файла (расширения) или если за ним записаны только такие же заменители до конца поля, то он обозначает любой символ или его отсутствие. В полях имени файла и расширения допускается использовать любое количество заменителей ?.
Примеры шаблонов с заменителем ?:
• MEMO?R.EXE подходит к любому файлу с расширением ЕХЕ, имя которого начинается
с MEMO, завершается символом R, а между ними находится ровно один произвольный символ;
• PROG. M сопоставляется со всеми файлами, имеющими имя PROG и трехсимвольное
расширение, если последним символом в расширении является М;
• GL. DAT подходит ко всем файлам с расширением DAT, имеющим имя, начинающееся
с символов GL, за которыми следует не более трех символов.
Заменитель * обозначает произвольную последовательность символов (возможно, нулевой длины) от данной позиции до конца поля имени файла или расширения (в соответствии с тем, в каком поле заменитель использован). В каждом поле (имени или расширения) допускается только по одному заменителю *, а все символы, которые указаны в поле за ним, игнорируются.
Примеры шаблонов с заменителем *:
• *.BAS сопоставляется со всеми файлами с расширением BAS;
• P*.PAS подходит ко всем файлам с расширением PAS, имя которых начинается с символа Р;
• *.* сопоставляется со всеми файлами, в том числе без расширений;
• *. подходит ко всем файлам, не имеющим расширения;
Сделаем два замечания:
1) к примеру, шаблоны * и *.* не эквивалентны, так как заменитель не может замещать
разделитель имени файла и расширения (.); •
2) при использовании заменителей ограничения на длину имени файла и расширения в
образце не снимаются.
Полезность шаблонов состоит не только в возможности задать множество файлов, но и в возможности упростить задание составного имени единственного файла. Например, вместо существующего файла PROGRAM.PAS часто достаточно указать Р*.*, если при этом не возникает неоднозначности.
Как известно, компьютер выполняет действия в соответствии с предписаниями программы, созданной на одном из языков программирования. При работе пользователя на компьютере часто возникает необходимость выполнить операции с прикладной программой в целом, организовать работу внешних устройств, проверить работу различных блоков, скопировать информацию и т.п.
Пример 9.1. Наиболее часто используемые операции:
- запуск программы на решение;
- организация записи программы на диск и считывание ее с диска;
- печать текста и результатов решения;
- копирование программы на другой диск;
- удаление программы с диска;
- просмотр содержимого диска и т.п. операции.
По существу, эти операции используются для работы с любой программой, воспринимаемой как единое целое. Поэтому целесообразно из всего многообразия операций, выполняемых компьютером, выделить типовые и реализовать их с помощью специализированных программ, которые следует принять в качестве стандартных средств, поставляемых вместе с аппаратной частью.
Программы, организующие работу устройств и не связанные со спецификой решаемой задачи, вошли в состав комплекса программ, названного операционной системой. Функции операционной системы многообразны, постоянно расширяются за счет введения дополнительных программ и модификации старых.
Операционная система совокупность программных средств, обеспечивающая управление аппаратной частью компьютера и прикладными программами, а также их взаимодействие между собой и пользователем.
Операционная система образует автономную среду, не связанную ни с одним из языков программирования. Любая же прикладная программа связана с операционной системой и может эксплуатироваться только на тех компьютерах, где имеется аналогичная системная среда. Прикладные программные средства, разработанные в среде одной операционной системы, не могут быть использованы для работы в среде другой операционной системы, если нет специального комплекса программ (конвертера), позволяющего это сделать. В таком случае говорят о программной несовместимости компьютеров.
Внимание! Программа, созданная в среде одной операционной системы, не функционирует в среде другой операционной системы, если в ней не обеспечена возможность конвертации (преобразования) программ.
Пример 9.2. Персональный компьютер Power Macintosh фирмы Apple Computer благодаря используемой в нем операционной системе программно совместим с персональными компьютерами фирмы IBM, на которых установлена операционная система MS DOS и Windows. Однако компьютер фирмы IBM программно не совместимы с компьютером фирмы Apple Computer, так как установленная в нем операционная система MS DOS не имеет в своем составе необходимого программного модуля конвертации.
Для работы с операционной системой необходимо овладеть языком этой среды совокупностью команд, структура которых определяется синтаксисом этого языка. Операционная система выполняет следующие функции:
- управление работой каждого блока персонального компьютера и их взаимодействием;
- управление выполнением программ;
- организацию хранения информации во внешней памяти;
- взаимодействие пользователя с компьютером, т.е. поддержку интерфейса пользователя.
Обычно операционная система хранится на жестком диске, а при его отсутствии выделяется специальный гибкий диск, который называется системным диском. При включении компьютера операционная система автоматически загружается с диска в оперативную память и занимает в ней определенное место. Операционная система создается не для отдельной модели компьютера, а для серии компьютеров, в структуре которых заложена и развивается во всех последующих моделях определенная концепция.
Регистр символов и файловая система Windows
Особенность файловой системы Windows заключается в том, что пользователи и разработчики, имеющие дело с другими операционными системами, могут сталкиваться с проблемами из-за того, что в именах каталогов и путях не учитывается регистр символов. Это значит, что в именах каталогов и файлов сохраняется регистр строк, используемый в момент их создания. Например, вызов метода
создает каталог с именем TeStDiReCtOrY. Если переименовать каталог или файл так, чтобы изменился регистр символов, в имени будет отражен регистр, используемый в момент переименования. Например, следующий код переименовывает файл test.txt в Test.txt:
Тем не менее при сравнении имен каталогов и файлов регистр символов не учитывается. Если выполнить поиск файла с именем "test.txt", API файловой системы .NET будут игнорировать регистр символов при сравнении. Таким образом, при поиске файла "test.txt" будут возвращены совпадения для файлов "Test.txt", "TEST.TXT", "test.TXT", а также любых других их вариантов с различным сочетанием букв в верхнем и нижнем регистре.
Соглашения об именах
Следующие фундаментальные правила позволяют приложениям создавать и обрабатывать допустимые имена файлов и каталогов независимо от файловой системы:
Используйте точку, чтобы отделить имя базового файла от расширения в имени каталога или файла.
Используйте обратную косую черту (\) для разделения компонентовпути. Обратная косая черта делит имя файла на путь к нему и одно имя каталога из другого имени каталога в пути. Обратную косую черту нельзя использовать в имени фактического файла или каталога, так как это зарезервированный символ, разделяющий имена на компоненты.
Используйте обратную косую черту в качестве части имен томов, например "C:\". в папке "C:\path\file" или "\\server\share" в "\server\share\path\file" для имен UNC. Дополнительные сведения об именах UNC см. в разделе ограничения максимальной длины пути .
Не предполагайте конфиденциальность регистра. Например, рассмотрим имена ОСКАРа, Оскара и оскара, хотя некоторые файловые системы (например, файловая система, совместимая с POSIX), могут рассматривать их как разные. Обратите внимание, что NTFS поддерживает семантику POSIX для учета регистра, но это не поведение по умолчанию. Дополнительные сведения см. в разделе CreateFile.
Конструкторы томов (буквы диска) точно так же не учитывают регистр. Например, "D:\" и "d:\" ссылаться на тот же том.
Используйте любой символ в текущей кодовой странице для имени, включая символы и символы Юникода в расширенном наборе символов (128–255), за исключением следующих:
Следующие зарезервированные символы:
- < (меньше чем);
- > (больше чем);
- : (двоеточие)
- " (двойная кавычка)
- / (косая черта)
- \ (обратная косая черта)
- | (вертикальная полоса или канал)
- ? (вопросительный знак)
- * (звездочка)
Целочисленное значение ноль, иногда называемое символом NUL ASCII.
Символы, целочисленные представления которых находятся в диапазоне от 1 до 31, за исключением альтернативных потоков данных, в которых разрешены эти символы. Дополнительные сведения о потоках файлов см. в разделе "Файл Потоки".
Любой другой символ, который не допускает целевая файловая система.
Используйте точку в качестве компонента каталога в пути для представления текущего каталога, например ".\temp.txt". Дополнительные сведения см. в разделе "Пути".
Используйте два последовательных периода (.).) в качестве компонента каталога в пути для представления родительского элемента текущего каталога, например ".. \temp.txt". Дополнительные сведения см. в разделе "Пути".
Не используйте следующие зарезервированные имена для имени файла:
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9. Кроме того, избегайте этих имен, за которым следует немедленное расширение; Например, NUL.txt не рекомендуется. Дополнительные сведения см. в разделе Пространства имен.
Не заканчивайте имя файла или каталога пробелом или точкой. Хотя базовая файловая система может поддерживать такие имена, оболочка Windows и пользовательский интерфейс не поддерживаются. Однако можно указать точку в качестве первого символа имени. Например, ".temp".
Имена файлов и каталогов
Все файловые системы соответствуют одинаковым общим соглашениям об именовании для отдельного файла: базовому имени файла и необязательному расширению, разделенному точкой. Однако каждая файловая система, например NTFS, CDFS, exFAT, UDFS, FAT и FAT32, может иметь определенные и различные правила формирования отдельных компонентов в пути к каталогу или файлу. Обратите внимание, что каталог — это просто файл с особым атрибутом, назначающим его в качестве каталога, но в противном случае должен соответствовать всем тем же правилам именования, что и обычный файл. Так как каталог терминов просто относится к специальному типу файла, насколько это касается файловой системы, некоторые справочные материалы будут использовать общий файл терминов для охвата как концепций каталогов, так и файлов данных. Из-за этого, если не указано иное, любые правила именования или использования или примеры для файла также должны применяться к каталогу. Путь к термину относится к одному или нескольким каталогам, обратным косикам и, возможно, имени тома. Дополнительные сведения см. в разделе "Пути ".
Ограничения количества символов могут отличаться и могут отличаться в зависимости от используемого формата префикса имени файловой системы и пути. Это еще больше усложняется поддержкой механизмов обратной совместимости. Например, более старая файловая система MS-DOS FAT поддерживает не более 8 символов для имени базового файла и 3 символа для расширения в общей сложности 12 символов, включая разделитель точек. Это обычно называется именем файла 8.3. Windows файловых систем FAT и NTFS не ограничиваются именами файлов 8.3, так как они поддерживают длинные имена файлов, но по-прежнему поддерживают версию 8.3 длинных имен файлов.
Ограничение максимальной длины пути
В выпусках Windows до Windows 10 версии 1607 максимальная длина пути равна MAX_PATH, которая определяется как 260 символов. В более поздних версиях Windows изменение раздела реестра или использование средства групповая политика требуется для удаления ограничения. Полные сведения см. в разделе об ограничении максимальной длины пути .
ПОНЯТИЕ ФАЙЛА.
В основе любой операционной системы лежит принцип организации работы внешнего устройства хранения информации. Несмотря на то, что внешняя память может быть технически реализована на разных материальных носителях (например, в виде гибкого магнитного диска или магнитной ленты), их объединяет принятый в операционной системе принцип организации хранения логически связанных наборов информации в виде так называемых файлов.
Файл логически связанная совокупность данных или программ, для размещения которой во внешней памяти выделяется именованная область.
Файл служит учетной единицей информации в операционной системе. Любые действия с информацией в MS DOS осуществляются над файлами: запись на диск, вывод на экран, ввод с клавиатуры, печать, считывание информации CD-ROM и пр.
На диске файл не требует для своего размещения непрерывного пространства, обычно он занимает свободные кластеры в разных частях диска. Сведения о номерах этих кластеров хранятся в специальной FAT- таблице, о которой вы узнаете в подразд. 9.2. Кластер является минимальной единицей пространства диска, которое может быть отведено файлу. Самый маленький файл занимает один кластер, большие файлы несколько десятков кластеров.
Справка. Сектор 512 байт. На гибком диске обычно 80 дорожек. На каждой дорожке; для 5" диска 9 секторов; для 3,5" диска 18 секторов, Кластер группа смежных секторов. Кластер для гибкого диска 1,2 сектора (0,512, 1 Кбайт). Кластер для жесткого диска 4, 8, 16 секторов (2-8 Кбайт).
В файлах могут храниться разнообразные виды и формы представления информации: тексты, рисунки, чертежи, числа, программы, таблицы и т.п. Особенности конкретных файлов определяются их форматом. Под форматом понимается элемент языка, в символическом виде описывающий представление информации в файле.
Текстовая информация хранится в файле в кодах ASCII, в так называемом текстовом формате. Содержимое текстовых файлов можно просмотреть на экране дисплея с помощью разных программных средств, в том числе и в MS DOS.
Любой другой файл с нетекстовой информацией просмотреть теми же средствами, что и текстовый файл, не удается. При просмотре на экран будут выводиться абсолютно непонятные символы.
Для характеристики файла используются следующие параметры:
- полное имя файла;
- объем файла в байтах;
- дата создания файла;
- время создания файла;
- специальные атрибуты файла: R (Read only) только для чтения, Н (Hidden) скрытый файл, S (System) системный файл, A (Archive) архивированный файл.
С понятием файла в MS DOS тесно связано понятие логического диска. Логический диск создается и управляется специальной программой (драйвером). Он имеет уникальное имя в виде одной латинской буквы, например С, D, Е, F и т.д. Логический диск может реализовываться на жестком диске, на гибком диске, на CD-ROM, в оперативной памяти (электронный диск) и т.п. На одном физическом диске может быть создано несколько логических дисков.
Внимание! В дальнейшем изложении под диском будем понимать логический диск.
ПОНЯТИЕ ФАЙЛА.
В основе любой операционной системы лежит принцип организации работы внешнего устройства хранения информации. Несмотря на то, что внешняя память может быть технически реализована на разных материальных носителях (например, в виде гибкого магнитного диска или магнитной ленты), их объединяет принятый в операционной системе принцип организации хранения логически связанных наборов информации в виде так называемых файлов.
Файл логически связанная совокупность данных или программ, для размещения которой во внешней памяти выделяется именованная область.
Файл служит учетной единицей информации в операционной системе. Любые действия с информацией в MS DOS осуществляются над файлами: запись на диск, вывод на экран, ввод с клавиатуры, печать, считывание информации CD-ROM и пр.
На диске файл не требует для своего размещения непрерывного пространства, обычно он занимает свободные кластеры в разных частях диска. Сведения о номерах этих кластеров хранятся в специальной FAT- таблице, о которой вы узнаете в подразд. 9.2. Кластер является минимальной единицей пространства диска, которое может быть отведено файлу. Самый маленький файл занимает один кластер, большие файлы несколько десятков кластеров.
Справка. Сектор 512 байт. На гибком диске обычно 80 дорожек. На каждой дорожке; для 5" диска 9 секторов; для 3,5" диска 18 секторов, Кластер группа смежных секторов. Кластер для гибкого диска 1,2 сектора (0,512, 1 Кбайт). Кластер для жесткого диска 4, 8, 16 секторов (2-8 Кбайт).
В файлах могут храниться разнообразные виды и формы представления информации: тексты, рисунки, чертежи, числа, программы, таблицы и т.п. Особенности конкретных файлов определяются их форматом. Под форматом понимается элемент языка, в символическом виде описывающий представление информации в файле.
Текстовая информация хранится в файле в кодах ASCII, в так называемом текстовом формате. Содержимое текстовых файлов можно просмотреть на экране дисплея с помощью разных программных средств, в том числе и в MS DOS.
Любой другой файл с нетекстовой информацией просмотреть теми же средствами, что и текстовый файл, не удается. При просмотре на экран будут выводиться абсолютно непонятные символы.
Для характеристики файла используются следующие параметры:
- полное имя файла;
- объем файла в байтах;
- дата создания файла;
- время создания файла;
- специальные атрибуты файла: R (Read only) только для чтения, Н (Hidden) скрытый файл, S (System) системный файл, A (Archive) архивированный файл.
С понятием файла в MS DOS тесно связано понятие логического диска. Логический диск создается и управляется специальной программой (драйвером). Он имеет уникальное имя в виде одной латинской буквы, например С, D, Е, F и т.д. Логический диск может реализовываться на жестком диске, на гибком диске, на CD-ROM, в оперативной памяти (электронный диск) и т.п. На одном физическом диске может быть создано несколько логических дисков.
Внимание! В дальнейшем изложении под диском будем понимать логический диск.
Работа с устаревшими устройствами
Если путь указывает на устаревшее устройство DOS, например CON , COM1 или LPT1 , он преобразуется в путь к устройству путем добавления перед ним последовательности \\.\ и возвращается в таком виде.
Путь, который начинается с имени устаревшего устройства, всегда интерпретируется как путь к устаревшему устройству с помощью метода Path.GetFullPath(String). Например, путь к устройству DOS CON.TXT будет выглядеть как \\.\CON , а путь к устройству DOS COM1.TXT\file1.txt будет выглядеть как \\.\COM1 .
Пример. Способы задать ссылку на один и тот же файл
В следующем примере демонстрируются некоторые способы задать ссылку на файл с использованием API в пространстве имен System.IO. В этом примере создается экземпляр объекта FileInfo и используются его свойства Name и Length, чтобы отобразить имя и длину файла.
Нормализация путей
Практически все передаваемые в API Windows пути нормализуются. При нормализации в Windows выполняются следующие действия:
- Идентифицируется путь.
- Текущий каталог применяется к неполным (относительным) путям.
- Выполняется канонизация разделителей каталогов.
- Вычисляются относительные компоненты каталога ( . для текущего и .. для родительского каталога).
- Удаляются некоторые символы.
Нормализация происходит неявно, но ее можно выполнить явным образом, вызвав Path.GetFullPath метод, который создает оболочку для вызова функции жетфуллпаснаме (). Также можно вызвать функцию GetFullPathName() Windows напрямую с помощью P/Invoke.
Пространства имен устройств Win32
Префикс "\\.\" будет обращаться к пространству имен устройства Win32 вместо пространства имен файлов Win32. Таким образом, доступ к физическим дискам и томам осуществляется напрямую без прохождения файловой системы, если API поддерживает этот тип доступа. Таким образом можно получить доступ к нескольким устройствам, кроме дисков (например, с помощью функций CreateFile и DefineDosDevice ).
Например, если вы хотите открыть последовательный порт связи системы 1, можно использовать com1 в вызове функции CreateFile . Это работает потому, что COM1–COM9 является частью зарезервированных имен в пространстве имен NT, хотя при использовании префикса "\\.\" также будут работать с этими именами устройств. Для сравнения, если установлена 100-последовательная плата расширения портов и вы хотите открыть COM56, ее нельзя открыть с помощью COM56, так как для COM56 нет предопределенного пространства имен NT. Его необходимо открыть с помощью "\\.\COM56", так как "\\\.\" переходит непосредственно в пространство имен устройства, не пытаясь найти предопределенный псевдоним.
Еще одним примером использования пространства имен устройства Win32 является использование функции CreateFile с "\\.\PhysicalDriveX" (где X является допустимым целым числом) или "\\.\CdRomX". Это позволяет обращаться к этим устройствам напрямую, обходя файловую систему. Это работает потому, что эти имена устройств создаются системой по мере перечисления этих устройств, а некоторые драйверы также создают другие псевдонимы в системе. Например, драйвер устройства, реализующий имя C:\. имеет собственное пространство имен, которое также может быть файловой системой.
ИНТЕРФЕЙСы API, которые проходят через функцию CreateFile , обычно работают с префиксом "\\.\", так как CreateFile — это функция, используемая для открытия файлов и устройств в зависимости от используемых параметров.
При работе с функциями API Windows следует использовать префикс "\\.\" для доступа только к устройствам, а не к файлам.
Большинство API не поддерживают "\\.\"; Распознаются только те, которые предназначены для работы с пространством имен устройства. Всегда проверяйте справочный раздел для каждого API, чтобы убедиться.
UNC-пути
UNC-пути (универсальное соглашение об именовании) используются для доступа к сетевым ресурсам и имеют следующий формат:
- Имя сервера или узла, которому предшествуют символы \\ . В качестве имени сервера может выступать имя компьютера NetBIOS, а также IP-адрес или полное доменное имя (поддерживаются адреса IPv4 и IPv6).
- Имя общего ресурса, которое отделяется от имени узла символами \ . Имя сервера и имя общего ресурса в совокупности образуют том.
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Ниже приводятся некоторые примеры UNC-путей:
Path | Описание |
---|---|
\\system07\C$\ | Корневой каталог диска C: на компьютере system07 . |
\\Server2\Share\Test\Foo.txt | Файл Foo.txt в тестовом каталоге тома \\Server2\Share . |
UNC-пути всегда должны быть полными. Они могут включать сегменты с относительным путем к каталогу ( . и .. ), однако они должны быть частью полного пути. Использовать относительные пути можно только посредством сопоставления UNC-пути с буквой диска.
Вычисление относительных компонентов
При обработке пути выполняется вычисление любых его компонентов или сегментов, которые состоят из одной или двух точек ( . или .. ):
Если обнаруживается одна точка, текущий сегмент удаляется, поскольку он ссылается на текущий каталог.
Если обнаруживаются две точки, удаляются текущий и родительский сегмент, поскольку в этом случае задается ссылка на родительский каталог.
Родительские каталоги удаляются только в том случае, если они не находятся после корня пути. Корень пути зависит от его типа. Это будет диск ( C:\ ) для путей DOS, сервер или общий сетевой ресурс для UNC-путей ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).
Традиционные пути DOS
Стандартный путь DOS может состоять из трех компонентов:
- Буква тома или диска, после которой следует разделитель томов ( : ).
- Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
- Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.
Если присутствуют все три компонента, путь является абсолютным. Если буква тома или диска не указана и имя каталога начинается с символа разделителя каталогов, такой путь задан относительно корня текущего диска. В противном случае путь задан относительно текущего каталога. В следующей таблице показаны некоторые возможные пути к каталогам и файлам.
Путь | Описание: |
---|---|
C:\Documents\Newsletters\Summer2018.pdf | Абсолютный путь к файлу из корня диска C: . |
\Program Files\Custom Utilities\StringFinder.exe | Абсолютный путь из корня текущего диска. |
2018\January.xlsx | Относительный путь к файлу в подкаталоге текущего каталога. |
..\Publications\TravelBrochure.pdf | Относительный путь к файлу в каталоге, начиная с текущего каталога. |
C:\Projects\apilibrary\apilibrary.sln | Абсолютный путь к файлу из корня диска C: . |
C:Projects\apilibrary\apilibrary.sln | Относительный путь из текущего каталога диска C: . |
Обратите внимание на различия между двумя последними путями. В обоих случаях задается необязательный описатель тома ( C: ), однако первый путь, в отличие от второго, начинается с корня указанного тома. В результате первый путь является абсолютным из корневого каталога диска C: , тогда как второй — относительным из текущего каталога C: . Использование второй формы пути в тех случаях, когда предполагается наличие первой, является распространенным источником ошибок, связанных с путями к файлам в Windows.
Чтобы определить, является ли путь к файлу полным (такой путь не зависит от текущего каталога и не изменяется при смене текущего каталога), можно вызвать метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты с относительным путем к каталогу ( . и .. ), но при этом по-прежнему будет полным, если разрешенный путь всегда указывает на одно и то же место.
В приведенном ниже примере показано различие между абсолютными и относительными путями. Предполагается, что каталог D:\FY2018\ существует и вы не установили какой-либо текущий каталог для диска D:\ из командной строки перед запуском этого примера.
Если вы хотите увидеть комментарии к коду, переведенные на языки, отличные от английского, сообщите нам на странице обсуждения этой проблемы на сайте GitHub.
Удаление знаков
Помимо удаленных ранее разделителей и относительных сегментов во время нормализации также удаляются некоторые дополнительные знаки:
Если сегмент заканчивается одной точкой, эта точка удаляется. (Сегмент одной или двойной точки нормализован на предыдущем шаге. Сегмент из трех или более периодов не нормализован и действительно является допустимым именем файла или каталога.)
Если путь не заканчивается разделителем, удаляются все конечные точки и пробелы (U+0020). Если последний сегмент содержит только одну или две точки, к нему применяется приведенное выше правило для относительных компонентов.
Это правило устанавливает, что вы можете создать имя каталога с конечным пробелом, добавив разделитель после пробела.
Создавать имена каталогов или файлов с конечным пробелом нельзя. Наличие конечных пробелов может затруднить или исключить возможность доступа к каталогу. В связи с этим при попытке обработать каталоги или файлы, имена которых содержат конечные пробелы, происходит сбой приложения.
Полные и относительные пути
Для функций API Windows, которые управляют файлами, имена файлов часто могут быть относительными к текущему каталогу, а некоторые API требуют полного пути. Имя файла относительно текущего каталога, если оно не начинается со следующего:
- UNC-имя любого формата, которое всегда начинается с двух символов обратной косой черты ("\\"). Дополнительные сведения см. в следующем разделе.
- Конструктор дисков с обратной косой чертой, например "C:\" или "d:\".
- Одна обратная косая черта, например "\directory" или "\file.txt". Это также называется абсолютным путем.
Если имя файла начинается только с конструктора дисков, но не обратной косой черты после двоеточия, он интерпретируется как относительный путь к текущему каталогу на диске с указанной буквой. Обратите внимание, что текущий каталог может быть корневым каталогом в зависимости от того, что он был установлен во время последней операции изменения каталога на этом диске. Ниже приведены примеры этого формата:
- "C:tmp.txt" ссылается на файл с именем "tmp.txt" в текущем каталоге на диске C.
- "C:tempdir\tmp.txt" относится к файлу в подкаталоге к текущему каталогу на диске C.
Путь также считается относительным, если он содержит "двойные точки"; то есть два периода вместе в одном компоненте пути. Этот специальный описатель используется для обозначения каталога над текущим каталогом, который иначе называется родительским каталогом. Ниже приведены примеры этого формата:
- ".. \tmp.txt" указывает файл с именем tmp.txt, расположенный в родительском каталоге текущего каталога.
- ".. \.. \tmp.txt" указывает файл, который является двумя каталогами над текущим каталогом.
- ".. \tempdir\tmp.txt" указывает файл с именем tmp.txt, расположенный в каталоге с именем tempdir, который является одноранговым каталогом текущего каталога.
Относительные пути могут объединять оба примера типов, например "C. \tmp.txt". Это полезно, так как система отслеживает текущий диск вместе с текущим каталогом этого диска, он также отслеживает текущие каталоги в каждой из разных букв дисков (если в вашей системе несколько), независимо от того, какой диктор диска установлен в качестве текущего диска.
Пути к устройствам DOS
В операционной системе Windows используется унифицированная объектная модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и предоставляются на уровень Win32 с использованием специальной папки с символьными ссылками, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с использованием синтаксиса пути к устройству DOS, который может иметь одну из приведенных ниже форм:
Помимо использования буквы диска, вы можете указать том с помощью его GUID. Синтаксис будет иметь вид:
Путь к устройству DOS состоит из следующих компонентов:
Описатель пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.
Символьная ссылка на "реальный" объект устройства (C: в случае имени диска или Volume в случае GUID тома).
Первый сегмент пути к устройству DOS после описателя пути к устройству идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)
Для UNC-путей существует специальная ссылка, которая называется UNC . Пример:
Для UNC-путей к устройствам часть сервера или общего сетевого ресурса образует том. Например, в пути \\?\server1\e:\utilities\\filecomparer\ часть server1\utilities представляет сервер или общий сетевой ресурс. Это важно при вызове такого метода, как Path.GetFullPath(String, String) с сегментами с относительным путем к каталогу, поскольку переход дальше тома невозможен.
Пути к устройствам DOS являются полными по определению и не могут начинаться с относительным сегментом каталога ( . или .. ). Они никогда не задаются относительно текущего каталога.
Пространства имен файлов Win32
Префикс пространства имен Win32 и соглашения приведены в этом разделе и в следующем разделе с описанием их использования. Обратите внимание, что эти примеры предназначены для использования с функциями API Windows и не все обязательно работают с приложениями оболочки Windows, такими как Windows Explorer. По этой причине существует более широкий спектр возможных путей, чем обычно доступны в приложениях оболочки Windows, и Windows приложения, которые используют преимущества этого, можно разработать с помощью этих соглашений о пространстве имен.
Так как он отключает автоматическое расширение строки пути, префикс "\\?\" также позволяет использовать ".." и "." в именах путей, которые могут быть полезны при попытке выполнить операции с файлом с этими зарезервированными относительными описателями пути в рамках полного пути.
Многие, но не все API-интерфейсы ввода-вывода файлов поддерживают "\\?\"; Необходимо ознакомиться со справочной темой для каждого API, чтобы убедиться.
Обратите внимание, что API Юникода должны использоваться для проверки того, что префикс "\?\" позволяет превысить MAX_PATH
Пространства имен
В api-интерфейсах Windows используются две основные категории соглашений о пространстве имен, которые обычно называются пространствами имен NT и пространствами имен Win32. Пространство имен NT было разработано для самого низкого уровня пространства имен, в котором могут существовать другие подсистемы и пространства имен, включая подсистему Win32 и, по расширению, пространства имен Win32. POSIX — это еще один пример подсистемы в Windows, построенной на основе пространства имен NT. Ранние версии Windows также определили несколько предопределенных или зарезервированных имен для определенных специальных устройств, таких как последовательные и параллельные порты, и консоль отображения по умолчанию в рамках того, что теперь называется пространством имен устройств NT, и по-прежнему поддерживаются в текущих версиях Windows для обратной совместимости.
Идентификация пути
На первом шаге процесса нормализации осуществляется идентификация типа пути. Пути могут относиться к одной из нескольких категорий:
- Пути к устройствам: начинаются с двух разделителей и знака вопроса или точки ( \\? или \\. ).
- UNC-пути: начинаются с двух разделителей без знака вопроса или точки.
- Полные пути DOS: начинаются с буквы диска, разделителя томов и компонентов ( C:\ ).
- Пути к устаревшим устройствам ( CON , LPT1 ).
- Пути относительно корня текущего диска: начинаются с одного разделителя компонентов ( \ ).
- Пути относительно текущего каталога указанного диска: начинаются с буквы диска и разделителя томов, но не содержат разделителя компонентов ( C: ).
- Пути относительно текущего каталога: начинаются с любых других символов ( temp\testfile.txt ).
Тип пути определяет, будет ли каким-либо образом применяться текущий каталог. Кроме того, от типа пути зависит применяемый корень.
Способы обращения к файлу.
Как обращаться к файлу.
К файлу можно обращаться с помощью имени, полного имени, спецификации. Для того чтобы воспользоваться одним из этих вариантов, надо знать ряд правил и соглашений, позволяющих унифицировать в операционной системе процедуру обращения к файлу. Рассмотрим эти варианты.
Правило образования имени. Имя файла всегда уникально и служит для отличия одного файла от другого. Имя файла образуется не более чем из восьми символов, причем используются только буквы латинского алфавита.
Внимание! При образовании имени нельзя использовать русские буквы и символы .*?:;,<>= пробел.
По имени к файлу обращаются редко, обычно только в тех прикладных программа, когда это специально предусмотрено, а также при вводе имени файла, где хранится команда операционной системы.
В качестве имени файла можно использовать символьное имя устройства:
PRN или LPT1(2,3) - принтер или любое устройство, подключенное к параллельному порту;
CON - консоль (клавиатура при вводе и дисплей при выводе);
СОМ1(2,3,4) - внешнее устройство, подключенное к последовательному порту;
NUL - фиктивное устройство, вывод в файл NUL никуда не направляется, а просто уничтожается.
Правило образования полного имени. Обычно к файлу обращаются с помощью полного имени, за исключением оговоренных выше случаев. Полное имя файла более подробно характеризует файл и образуется из имени файла и типа (расширения), разделенных точкой.
Тип файла служит для характеристики хранящейся в файле информации и образуется не более чем из трех символов, причем используются, как и при образовании имени, только буквы латинского алфавита.
Внимание! В полном имени недопустимы пробелы между именем и типом.
При образовании типа, так же как и имени, нельзя использовать русские буквы и символы .*?:;,<>'= пробел.
Пример 9.3. BETA.BAS файл BETA для хранения программ на Бейсике, STRAN.TXT файл STRAN для хранения текста; COPY .СОМ файл COPY, содержащий программу операционной системы по копированию файлов.
При работе на персональном компьютере установлен ряд соглашений по заданию типа файла, некоторые из которых приведены в табл.9.1
Таблица 9.1. Соглашения по типу файлов
Внимание! Пользуйтесь всегда соглашениями по типу файла из табл. 9.1. При несоблюдении этих соглашений вы затрудните дальнейшую работу и свою, и коллег. При обращении к файлу типа ВАТ, СОМ, ЕХЕ достаточно задать только его имя, тип не указывается. При одинаковых именах приоритет в порядке, указанном выше.
Практические рекомендации. Хотя операционная система разрешает в имени и типе файла наличие написанных в любой последовательности символов с учетом ограничений, рекомендуется использовать буквы латинского алфавита и цифры, а имя начинать с буквы.
При назначении имен файлов рекомендуется образовывать их так, чтобы они отражали смысловое содержание файла.
Правило образования спецификации. Спецификация файла обычно используется тогда, когда файл хранится на диске пассивного дисковода или в пассивном каталоге, о котором вы узнаете в подразд. 9,2. Различают две формы спецификации: сокращенную и полную. Правило образования полной формы спецификации будет рассмотрено далее после того, как будет определено понятие каталога. Сокращенная форма спецификации образуется из имени логического диска и полного имени файла, разделенных двоеточием.
Пример 9.4. B:BETA.DAT эта спецификация указывает, что файл ВETA с данными находится на диске, установленном в дисководе В.
Внимание! В спецификации файла недопустимы пробелы. Если вы не указали имени логического диска, то при записи или чтении файла обращение будет производиться к текущему диску. Имя текущего диска вы узнаете из приглашения, появляющегося на экране дисплея. О сути приглашения см. подразд. 9.2.
Как обращаться к группе файлов
Часто возникает ситуация, когда надо работать не с одним файлом, а с группой файлов.
Пример 9.5. Операции с группой файлов:
- копирование группы файлов с одного диска на другой;
- удаление группы файлов;
- перемещение группы файлов на другой диск;
- поиск группы файлов заданного типа и т.п.
Эти операции достаточно легко выполнить, пользуясь при формировании имен и типов файлов шаблоном.
Шаблон имени файла специальная форма, в которой в полях имени и типа файла используются символы * или ? .
Символ * служит для замены любой последовательности символов. В шаблоне может быть использовано в поле имени и типа по одному символу * .
Пример 9.6. Задав имя ".ТХТ, вы обратитесь ко всем текстовым файлам, Задав имя SD*,*. вы обратитесь ко всем файлам, имя которых начинается па SD,
Символ ? служит для замены одного символа. В шаблоне может быть использовано несколько таких символов.
Пример 9.7. Имя RT. BAS позволит обратиться ко всем файлам типа BAR, имя которых состоит из четырех символов, причем первые два символа обязательно RT, третий и четвертый любые.
Все файловые системы, поддерживаемые Windows, используют концепцию файлов и каталогов для доступа к данным, хранящимся на диске или устройстве. Windows разработчики, работающие с API-интерфейсами Windows для операций ввода-вывода файлов и устройств, должны понимать различные правила, соглашения и ограничения имен файлов и каталогов.
Доступ к данным можно получить с дисков, устройств и сетевых ресурсов с помощью API-интерфейсов ввода-вывода файлов. Файлы и каталоги, наряду с пространствами имен, являются частью концепции пути, который представляет собой строковое представление места для получения данных независимо от того, находится ли он с диска или устройства или сетевого подключения для определенной операции.
Некоторые файловые системы, такие как NTFS, поддерживают связанные файлы и каталоги, которые также соответствуют соглашениям об именовании файлов и правилам так же, как обычный файл или каталог. Дополнительные сведения см. в разделе "Жесткие ссылки" и "Соединения" , " Точки повторного анализа" и "Операции с файлами".
Дополнительные сведения см. в следующих подразделах:
Дополнительные сведения о настройке Windows 10 для поддержки длинных путей к файлам см. в разделе "Ограничение максимальной длины пути".
Пространства имен NT
Существуют также API, которые позволяют использовать соглашение о пространстве имен NT, но диспетчер объектов Windows делает это ненужным в большинстве случаев. Чтобы проиллюстрировать, полезно просмотреть пространства имен Windows в браузере системных объектов с помощью средства winObj Windows Sysinternals. При запуске этого средства отображается пространство имен NT, начинающееся с корневого каталога, или "\". Вложенная папка с именем "Global??" — это место расположения пространства имен Win32. Именованные объекты устройства находятся в пространстве имен NT в подкаталоге Device. Здесь также можно найти Serial0 и Serial1, объекты устройства, представляющие первые два COM-порта, если они присутствуют в системе. Объект устройства, представляющий том, будет примерно таким, как HarddiskVolume1, хотя числовой суффикс может отличаться. Имя DR0 в подкаталоге "Harddisk0" является примером объекта устройства, представляющего диск и т. д.
Чтобы сделать эти объекты устройств доступными Windows приложениями, драйверы устройств создают символьную ссылку (символьную ссылку) в пространстве имен Win32 "Global??", к соответствующим объектам устройства. Например, COM0 и COM1 в подкаталоге "Global??" — это просто символьные ссылки на Serial0 и Serial1, "C:" — это символьная ссылка на HarddiskVolume1, "Physicaldrive0" — это символьная ссылка на DR0 и т. д. Без символьного канала указанное устройство Xxx не будет доступно ни одному приложению Windows с помощью соглашений о пространстве имен Win32, как описано выше. Однако дескриптор можно открыть на этом устройстве с помощью любых API, поддерживающих абсолютный путь к пространству имен NT формата \Device\Xxx.
Благодаря добавлению поддержки нескольких пользователей через службы терминалов и виртуальные машины стало еще больше необходимо виртуализировать корневое устройство на уровне системы в пространстве имен Win32. Для этого добавьте символьную ссылку с именем GLOBALROOT в пространство имен Win32, которое можно увидеть в подкаталоге "Global??" средства браузера WinObj, описанного ранее, и сможете получить доступ через путь "\\?\GLOBALROOT". Этот префикс гарантирует, что следующий путь выглядит в истинном корневом пути диспетчера системных объектов, а не в зависимом от сеанса пути.
Члены большинства типов в пространстве имен System.IO имеют параметр path , который позволяет указать абсолютный или относительный путь к ресурсу в файловой системе. Этот путь передается в API файловой системы Windows. В этом разделе рассматриваются форматы путей к файлам, которые можно использовать в операционных системах Windows.
Пропуск нормализации
Как правило, любой путь, передаваемый в API Windows передается в функцию GetFullPathName и нормализуется. Существует одно важное исключение: путь к устройству, который начинается со знака вопроса, а не с точки. Если путь не начинается с последовательности \\?\ (обратите внимание на использование канонической формы с обратной косой чертой), он нормализуется.
Зачем нужно пропускать нормализацию? Существует три основных причины:
Получение путей, которые в обычных обстоятельствах недоступны, но являются допустимыми. Например, невозможно каким-либо иным способом получить доступ к файлу или каталогу с именем hidden. .
Повышение производительности за счет пропуска нормализации в тех случаях, когда нормализация уже выполнена.
Пропуск нормализации и проверки максимальной длины пути является единственным отличием между двумя видами синтаксиса путей к устройствам. В остальных аспектах они идентичны. Пропуск нормализации следует использовать с осторожностью, поскольку в этом случае легко получить пути, при работе с которыми в обычных приложениях будут возникать трудности.
Пути, начинающиеся с последовательности \\?\ , по-прежнему нормализуются, если явно передать их в функцию GetFullPathName.
Вы можете передавать пути длиной более MAX_PATH символов в функцию GetFullPathName без \\?\ . Она поддерживает пути произвольной длины, которая ограничивается лишь максимальным размером строки, поддерживаемым в Windows.
Канонизация разделителей
Все символы косой черты ( / ) преобразуются в стандартные разделители Windows, то есть символы обратной косой черты ( \ ). Если они присутствуют, последовательность символов косой черты после первых двух таких символов свертывается в один символ косой черты.
Короткие и длинные имена
Длинное имя файла считается любым именем файла, превышающим короткое соглашение об именовании стилей MS-DOS (также называемое 8.3). При создании длинного имени файла Windows также может создать короткую форму имени 8.3, которая называется псевдонимом 8.3 или коротким именем, а также хранить его на диске. Этот псевдоним версии 8.3 можно отключить по соображениям производительности по всей системе или для указанного тома в зависимости от конкретной файловой системы.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: псевдоним 8.3 нельзя отключить для указанных томов до Windows 7 и Windows Server 2008 R2.
Во многих файловых системах имя файла будет содержать тильду (~) в каждом компоненте имени, которое слишком долго соответствует правилам именования 8.3.
Не все файловые системы соответствуют соглашению о замене тильды, и системы можно настроить для отключения создания псевдонима 8.3, даже если они обычно поддерживают его. Поэтому не следует предполагать, что псевдоним 8.3 уже существует на диске.
Чтобы запросить имена файлов 8.3, длинные имена файлов или полный путь к файлу из системы, рассмотрите следующие параметры:
- Чтобы получить форму 8.3 длинного имени файла, используйте функцию GetShortPathName .
- Чтобы получить длинную версию имени файла короткого имени, используйте функцию GetLongPathName .
- Чтобы получить полный путь к файлу, используйте функцию GetFullPathName .
В более новых файловых системах, таких как NTFS, exFAT, UDFS и FAT32, Windows сохраняет длинные имена файлов на диске в Юникоде, что означает, что исходное длинное имя файла всегда сохраняется. Это верно, даже если длинное имя файла содержит расширенные символы, независимо от кодовой страницы, активной во время операции чтения или записи диска.
Файлы с длинными именами файлов можно копировать между секциями файловой системы NTFS и Windows секциями файловой системы FAT, не теряя никаких сведений об имени файла. Это может быть не так для старых файловых систем MS-DOS FAT и некоторых типов CDFS (CD-ROM) в зависимости от фактического имени файла. В этом случае короткое имя файла будет заменено, если это возможно.
Путь к указанному файлу состоит из одного или нескольких компонентов, разделенных специальным символом (обратная косая черта), при этом каждый компонент обычно является именем каталога или именем файла, но с некоторыми заметными исключениями, рассмотренными ниже. Зачастую крайне важно интерпретировать системой путь, как выглядит начало или префикс пути. Этот префикс определяет пространство имен , используемое путем, а также специальные символы, используемые в какой позиции в пути, включая последний символ.
Если компонент пути является именем файла, он должен быть последним компонентом.
Каждый компонент пути также будет ограничен максимальной длиной, указанной для конкретной файловой системы. Как правило, эти правила делятся на две категории: короткие и длинные. Обратите внимание, что имена каталогов хранятся файловой системой как особый тип файла, но правила именования файлов также применяются к именам каталогов. Чтобы подвести итог, путь — это просто строковое представление иерархии между всеми каталогами, которые существуют для определенного файла или имени каталога.
Применение текущего каталога
Если путь не является полным, система Windows применяет к нему текущий каталог. К UNC-путям и путям к устройствам текущий каталог не применяется. Также текущий каталог не применяется к полным путям к диску с разделителем C:\ .
Если путь начинается с одного разделителя компонентов, применяется диск текущего каталога. Например, для пути к файлу \utilities и текущего каталога C:\temp\ в результате нормализации будет получен путь C:\utilities .
Если путь начинается с буквы диска, разделителя томов и не содержит разделителя компонентов, применяется последний текущий каталог, установленный из командной оболочки. Если последний текущий каталог не был установлен, применяется диск сам по себе. Например, для пути D:sources , текущего каталога C:\Documents\ и последнего текущего каталога D:\sources\ на диске D: в результате будет получен путь D:\sources\sources . Пути, задаваемые относительно диска, являются распространенными источниками ошибок программ и логики скрипта. Предположение, что путь, начинающийся с буквы и двоеточия, не является относительным, очевидно неверно.
Если путь не начинается с разделителя, применяются текущий диск и текущий каталог. Например, для пути к файлу filecompare и текущего каталога C:\utilities\ в результате будет получен путь C:\utilities\filecompare\ .
Читайте также: