Итак, сегодня третья заключительная часть краткого обзора нового модуля Delphi 2010 — IOUtils.pas. Рассматриваем работу с классом TPath.
В начале кратко о том, для чего можно использовать класс. Судя по составу методов, TPath можно использовать для проверки путей к файлам и директориям, извлекать из пути имя и расширения файла, проверять правильность составления пути к файла и директориям и т.д. Рассмотрим эти методы более подробно.
1. Проверка правильности пути и имени файла
Для проверки валидности символов в пути и имени файла используются следующие методы:
class function IsValidPathChar(const AChar: Char): Boolean; inline; static; class function IsValidFileNameChar(const AChar: Char): Boolean; inline; static; class function HasValidPathChars(const Path: string; const UseWildcards: Boolean): Boolean; static; class function HasValidFileNameChars(const FileName: string; const UseWildcards: Boolean): Boolean; static;
При этом IsValidPathChar провряет валидность символа в пути и если символ — это:
(#0..#31, '"', '<', '>', '|')
то функция возвращает False.
Соответственно IsValidFileNameChar возвращает false, если символ:
( #0..#31, '"', '*', '/', '"', '<', '>', '?', '\', '|');
Соответственно методы HasValidPathChars и HasValidFileNameChars проверяют уже всю строку, а не отдельный символ. При этом UseWildcards определяет будут ли учитываться символы «дикой карты» при проверке.
Для HasValidPathChars такими символави являются:
('*', ':' ,'?' ,'/', '\')
а для HasValidFileNameChars
('*', '?')
Если при проверке строки в ней находится один или несколько символов дикой карты, то пезультат всё равно будет true.
Работа с префиксами
Следующие методы проверяют какой путь задан в Path.
class function IsUNCRooted(const Path: string): Boolean; static; class function IsUNCPath(const Path: string): Boolean; inline; static; class function IsDriveRooted(const Path: string): Boolean; static; class function DriveExists(const Path: string): Boolean; static;
Соответственно, первые два метода относятся к проверке того является ли Path UNC-путем вида:
\\server\folder\path
Третий метод и четвертый определяют является ли путь обчным локальным вида:
C:/Folder/path
и содержит ли путь имя локального диска.
Работа файлами и папкой Temp
Рассмотрим несколько методов, которые можно использовать для работы с файлами:
class function GetRandomFileName: string; static; class function GetTempFileName: string; static; class function GetTempPath: string; static;
Метод GetRandomFileName, как понятно из названия, возвращает абсолютно случайное название файла, например:
TdjfgRTgG.QFH
GetTempFileName возвращает имя, наиболее подходящее для временного, т.е. вида:
tmp????.tmp
Соответственно GetTempPath возвращает путь к директории для хранения временных файлов.
Остальные методы класса TPath так или иначе пересекаются в своей работе с метоами клссов TFile и TDirectory, например, получают атрибуты директории, расширение файла и т.д.
Вот пожалуй очень кратко о том, какие возможности предоставляет нам новый модуль Delphi 2010 — IOUtils.pas. В целом классы TFile, TPath и TDirectory обхединяют в себе все те давно известные нам методы, наподобие ExtractFileName и т.д. которые мы использовали ранее. Ничего нового в принципе нет. Использовать или нет этот модуль в своих разработках — это как обычно, дело каждого. Как по мне, так с IOUtils работа с файлами и директориями становится более простой и понятной.
Спасибо, буду пользоваться.
Это хорошо, что пересматривают старые процедурно-ориентированные методы в сторону оформления их в классы
А как получиться путь без файла
Аналог ExtractFilePath
Нашел TPath.GetDirectoryName
Но логичнее по другому было б назвать
Алексей (Минск), элементарно TPath.GetDirectoryName(‘путь’) — возвращает полный путь к файлу без последнего слэша
Комменты тормозят =()))
не тормозят — стоит премодерация.
По поводу проверки допустимости имени файла — это сложнее, чем просто выброс предопределённого набора символов. Из полезных функций, не упомянутых в той теме — PathSearchAndQualify.