уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Итак, сегодня третья заключительная часть краткого обзора нового модуля 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 работа с файлами и директориями становится более простой и понятной.

5 1 голос
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
7 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
13-ый
05/06/2010 00:06

Спасибо, буду пользоваться.

Это хорошо, что пересматривают старые процедурно-ориентированные методы в сторону оформления их в классы

Алексей (Минск)
Алексей (Минск)
05/06/2010 17:43

А как получиться путь без файла

Аналог ExtractFilePath

Алексей (Минск)
Алексей (Минск)
05/06/2010 17:51

Нашел TPath.GetDirectoryName
Но логичнее по другому было б назвать

Алексей (Минск)
Алексей (Минск)
05/06/2010 19:04

Комменты тормозят =()))

Александр
07/06/2010 14:19

По поводу проверки допустимости имени файла — это сложнее, чем просто выброс предопределённого набора символов. Из полезных функций, не упомянутых в той теме — PathSearchAndQualify.