Что нового

Операции с путями к папкам и файлам

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Может кому пригодится пару функций для обработки путей к папкам и файлам.
Код:
;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Получает из полного пути путь к файлу или папке
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath       =    переменная, которая содержит полный путь.
;                $_sResult    =    переменная, в которую поместить полученный результат.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, если удалось получить путь
;                Возращает 0 и @error = 1, если нет.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Путь к папке или файлу считается: диск:\папка\ и т.д., после конечная папка или файл.
;                Например полный путь C:\Folder\File вернет путь C:\Folder\
;------------------------------------------------------------------------------------------------------
Func FullPath_GetPath_(ByRef $_sPath, ByRef $_sResult)
   $_sResult = StringRegExpReplace($_sPath, '(?i)\A(.+\\)[^\\]+\\?\z', '$1')
   If Not @extended Then $_sResult = ''
   Return SetError(Not @extended, 0, @extended)
EndFunc

;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Делит полный путь на массив, диск:\ + папка1\папка2\ + файл
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath       =    переменная, которая содержит полный путь.
;                $_sResult    =    переменная, в которую поместить полученный массив.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, всегда.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Полученный массив всегда имеет одинаковую размерность равную 3-ем.
;            Массив{0] = диск:\
;            Массив{1] = папка\папка\ и т.д.
;            Массив{2] = файл или файл.тип
;                Если какую либо из частей пути не удалось найти, то в массиве будут пустые строки,
;            например:
;            Массив{0] = диск:\
;            Массив{1] =
;            Массив{2] = файл или файл.тип
;------------------------------------------------------------------------------------------------------
Func FullPath_Split_(ByRef $_sPath, ByRef $_aResult)
   $_aResult = StringRegExp($_sPath, '(?i)\A([[:alpha:]]:\\)?((?:[^\\]+\\)*)(.*)?\z', 3)
   Return 1
EndFunc

;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Получает из полного пути имя файла в формате File.type или File
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath       =    переменная, которая содержит полный путь.
;                $_sResult    =    переменная, в которую поместить полученный результат.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, если удалось получить имя.
;                Возращает 0 и @error = 1, если нет.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Именем файла считается набор любых символов, кроме запрещенных в имени папок и файлов,
;            которые следуют после последней косой черты, или вся строка.
;------------------------------------------------------------------------------------------------------
Func FullPath_GetFile_(ByRef $_sPath, ByRef $_sResult)
   $_sResult = StringRegExpReplace($_sPath, '(?i).*?([^\\]+)\z', '$1')
   If Not @extended Then $_sResult = ''
   Return SetError(Not @extended, 0, @extended)
EndFunc

;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Получает из полного пути папку в формате Folder1\Folder2\ и т.д.
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath       =    переменная, которая содержит полный путь.
;                $_sResult    =    переменная, в которую поместить полученный результат.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, если удалось получить папку.
;                Возращает 0 и @error = 1, если нет.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Папкой считается набор любых символов, кроме запрещенных в имени папок и файлов, и
;                    косая черта, например папка\ или Folder\папка\ и т.д.
;------------------------------------------------------------------------------------------------------
Func FullPath_GetDirectory_(ByRef $_sPath, ByRef $_sResult)
   $_sResult = StringRegExpReplace($_sPath, '(?i).*?((?:[^:\\]+\\)+).*', '$1')
   If Not @extended Then $_sResult = ''
   Return SetError(Not @extended, 0, @extended)
EndFunc

;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Получает из полного пути букву диска в формате Drive:\
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath       =    переменная, которая содержит полный путь.
;                $_sResult    =    переменная, в которую поместить полученный результат.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, если удалось получить букву диска.
;                Возращает 0 и @error = 1, если нет.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Буквой диска считается, латинский символ за ним двоеточие и косая черта, например: C:\
;------------------------------------------------------------------------------------------------------
Func FullPath_GetDrive_(ByRef $_sPath, ByRef $_sResult)
   $_sResult = StringRegExpReplace($_sPath, '(?i)\A([[:alpha:]]:\\).*', '$1')
   If Not @extended Then $_sResult = ''
   Return SetError(Not @extended, 0, @extended)
EndFunc

;ОПИСАНИЕ    -------------------------------------------------------------------------------------------
;                Проверяет правильность написания полного пути к папке или файлу
;ПАРАМЕТРЫ    -------------------------------------------------------------------------------------------
;                $_sPath    =    переменная, которая содержит полный путь.
;                $_iFix        =    0 - только проверка.
;                                        1 - исправить правильность написания пути.
;РЕЗУЛЬТАТ    -------------------------------------------------------------------------------------------
;                Возращает 1 и @error = 0, если путь составлен правильно.
;                Возращает 0 и @error = 1, Еесли нет.
;ПРИМЕЧАНИЕ    -------------------------------------------------------------------------------------------
;                Если $_iFix = 1, то путь будет исправлен, по возможности и результат помещен
;                    в переменную которая была передана в $_sPath
;                Пример правильного пути: Диск:\Папка\Файл, например: C:\Folder\File. или C:\Folder\
;                Символы \<>:|/*"? в имени папки и файла запрещены.
;------------------------------------------------------------------------------------------------------
Func FullPath_Verify_(ByRef $_sPath, $_iFix = 0)
   If $_iFix Then
      $_sPath = StringRegExpReplace($_sPath, '(?i)((?:[[:alpha:]]:\\)?(?:[^\\:|/\*<>?"\v\t]+\\?)*)([\\:|/\*<>?"\v\t])*', '$1')
   EndIf
   $_iResult = StringRegExp($_sPath, '(?i)\A([[:alpha:]]:\\)?([^\\:|/\*<>?"\v\t]+\\?)*\z', 0)
   Return SetError(Not $_iResult, 0, $_iResult)
EndFunc
 
Верх