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