IMStrelcov
CTPEJIbLLOB
- Сообщения
- 259
- Репутация
- 66
- Версия AutoIt
- 3.3.14.5
- Версия
- 0.1
МОЖЕТ КОМУ БУДЕТ ПОЛЕЗНЫМ.
Мои функции для работы с путями к файлам или папкам.
Функции старался делать как можно компактнее и чтобы работали быстрее аналогов.
Мои функции для работы с путями к файлам или папкам.
Функции старался делать как можно компактнее и чтобы работали быстрее аналогов.
Код:
;################################################################################
;
; Описание......: добавить в конец пути "\" если ее нет
;
; Синтаксис.....: Path_AddSlash_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает путь с "\" в конце
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
;################################################################################
Func Path_AddSlash_($_sPath)
Return StringRegExp($_sPath, '^(.*?)(?:\\+)?$', 3)[0]& '\'
EndFunc
;################################################################################
;
; Описание......: удалить в конце пути "\"
;
; Синтаксис.....: Path_DelSlash_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает путь без "\" в конце
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
;################################################################################
Func Path_DelSlash_($_sPath)
Return StringRegExp($_sPath, '^(.*?)(?:\\+)?$', 3)[0]
EndFunc
;################################################################################
;
; Описание......: получить из пути, путь без имени и типа (если есть) файла/папки
;
; Синтаксис.....: Path_GetPath_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает путь без имени и типа (если есть) файла/папки
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
;################################################################################
Func Path_GetPath_($_sPath)
Return StringRegExp($_sPath, '^(.*?\\)?[^\\]*\\?$', 3)[0]
EndFunc
;################################################################################
;
; Описание......: удалить из пути диск
;
; Синтаксис.....: Path_GetSubPath_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает путь без диска
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
; "\" в начале $_sPath будет считаться диском
;
;################################################################################
Func Path_GetSubPath_($_sPath)
Return StringRegExp($_sPath, '^(?:(?:.:)?\\?)?([^\\]?.*)?', 3)[0]
EndFunc
;################################################################################
;
; Описание......: получить из пути диск
;
; Синтаксис.....: Path_GetDrive_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает диск
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
; "\" в начале $_sPath будет считаться диском
;
;################################################################################
Func Path_GetDrive_($_sPath)
Return StringRegExp($_sPath, '^((?:.:)?\\?)?', 3)[0]
EndFunc
;################################################################################
;
; Описание......: получить из пути имя и тип (если есть) файла/папки
;
; Синтаксис.....: Path_GetFile_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает имя и тип (если есть) файла/папки
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
;################################################################################
Func Path_GetFile_($_sPath)
Return StringRegExp($_sPath, '([^\\]+\\?)?$', 3)[0]
EndFunc
;################################################################################
;
; Описание......: получить из пути имя файла
;
; Синтаксис.....: Path_GetFileName_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает имя файла
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
; если $_sPath заканчивается косой чертой "\"
; то это будет считаться папкой, а не файлом
;
;################################################################################
Func Path_GetFileName_($_sPath)
Return StringRegExp($_sPath, '([^\\]*?)?(?(?=\.[^\h\.\\]+)\.[^\h\.\\]*)$', 3)[0]
EndFunc
;################################################################################
;
; Описание......: получить из пути тип файла
;
; Синтаксис.....: Path_GetFileType_($_sPath)
;
; Параметры.....: $_sPath = путь к файлу/папке
;
; Результат.....: возвращает тип файла
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
;
; если $_sPath заканчивается косой чертой "\"
; то это будет считаться папкой, а не файлом
;
;################################################################################
Func Path_GetFileType_($_sPath)
Return StringRegExp($_sPath, '(\.[^\h\.\\]+)?$', 3)[0]
EndFunc
;################################################################################
;
; Описание......: создает полный абсолютный путь на основе относительного пути
;
; Синтаксис.....: Path_GetFullPath_($_sPath [, $_sBase = @WorkingDir])
;
; Параметры.....: $_sPath = относительный путь к диску/папке/файлу,
; может начинаться как с диска так и с имени папки/файла,
; или косой черты (рабочий диск), или одной (рабочая папка)
; и двух (папка назад) точек с косой чертой
;
; $_sBase = базовый путь, который будет использоваться,
; может быть или полный путь к каталогу,
; или буква диска с двоеточием
;
; Результат.....: возвращает полный абсолютный путь к диску/папке/файлу,
;
; Примечание....: рекомендуется указывать в $_sPath правильный путь
; рекомендуется указывать в $_sBase полный, правильный путь
;
; в $_sPath, начале пути может быть как "диск",
; так и "\" = рабочий диск, ".\" = путь к рабочему каталогу,
; так же могут быть "..\" = каталогом назад
;
;################################################################################
Func Path_GetFullPath_($_sPath, $_sBase = @WorkingDir)
If Not StringRegExp($_sBase, '(^[[:alpha:]]:)') Then $_sBase = @WorkingDir
$_sBase = StringRegExp($_sBase, '(.*?)\\*$', 3)[0]& '\'
If StringRegExp($_sPath, '(^\\)') Then
$_sPath = StringRegExp($_sBase, '^.', 3)[0]& ':'& $_sPath
ElseIf Not StringRegExp($_sPath, '(^[[:alpha:]]:)') Then
$_sPath = $_sBase& StringRegExp($_sPath, '^(?(?!\.\.)\.?\\?)(.*)?', 3)[0]
EndIf
$_aPath = StringRegExp($_sPath, '([^\\]+\\?|\\|^$)', 3)
$_sPath = ''
For $_sText In $_aPath
If StringRegExp($_sText, '(^\.{2}(\\|$))') Then
$_sPath = StringRegExp($_sPath, '^(([^\\]+\\)+)?[^\\]+?\\?$', 3)[0]
Else
$_sPath &= $_sText
EndIf
Next
Return $_sPath
EndFunc
;################################################################################
;
; Описание......: исправляет правильность написания пути к диску/папке/файлу,
; удаляя не допустимые символы и имена папок/файлов
;
; Синтаксис.....: Path_Corrections_($_sPath)
;
; Параметры.....: $_sPath = путь к диску/папке/файлу, который нужно исправить
;
; Результат.....: возвращает исправленный путь к диску/папке/файлу
;
; Примечание....: в $_sPath, начале пути может быть как "диск",
; так и "\" = рабочий диск, ".\" = путь к рабочему каталогу,
; так же могут быть "..\" = каталогом назад
;
;################################################################################
Func Path_Corrections_($_sPath)
$_sPath = StringRegExpReplace($_sPath, '(?ixs)([*?"<>\v\t]+)', '')
$_sPath = StringRegExpReplace($_sPath, '(?ixs)([\\|/]+)', '\\')
$_sPath = StringRegExpReplace($_sPath, '(?ixs)^[:\.\h]*([[:alpha:]])[\.\h]*:[:\.\h]*\\?', '$1:\\')
$_sPath = StringRegExpReplace($_sPath, '(?ixs)(?(?<!^[[:alpha:]]):)', '')
$_sPath = StringRegExpReplace($_sPath, '(?ixs) ([^\h\.\\])[\h\.]+(\\|$)', '$1$2')
$_sPath = StringRegExpReplace($_sPath, '(?ixs) (?(?<=\\)(\.(\h[\h\.]*)?|\.{2}[\h\.]+|\h+[\h\.]*)(\\|$))', '')
$_sPath = StringRegExpReplace($_sPath, '(?ixs) ^(\.(\h[\h\.]*)|\.{2}[\h\.]+|\h+[\h\.]*)(\\|$)', '')
Return $_sPath
EndFunc
;################################################################################
;
; Описание......: Генерирует новое имя папки/файла, если он уже существует,
; так как это делает винда, добавляя к имени номер в скобках
;
; Синтаксис.....: Path_SetPrefix_($_sPath [, $_iPrefix = 2])
;
; Параметры.....: $_sPath = путь к диску/папке/файлу
;
; $_iPrefix = с какого номера начать счет
;
; Результат.....: возвращает путь к диску/папке/файлу с новым именем
;
; Примечание....: рекомендуется указывать в $_sPath полный, правильный путь
;
;################################################################################
Func Path_SetPrefix_($_sPath, $_iPrefix = 2)
While 1
$_sPath = StringRegExpReplace($_sPath, '^(.*?)(?:\h\([0-9]+\))?(\.[^\h\.]+)?$', '$1 ('& $_iPrefix& ')$2')
If Not FileExists($_sPath) Then ExitLoop
$_iPrefix += 1
WEnd
Return $_sPath
EndFunc
;################################################################################
;
; Описание......: проверяет правильность написания пути к диску/папке/файлу
;
; Синтаксис.....: Path_IsCorrect_($_sPath)
;
; Параметры.....: $_sPath = путь к диску/папке/файлу, который нужно проверить
;
; Результат.....: возвращает 1 - если путь правильный
;
;################################################################################
Func Path_IsCorrect_($_sPath)
Return StringRegExp($_sPath, '(?ixs)^(([[:alpha:]]:|\.)?($|\\))?((([\.\h]*[^|\\/:*?"<>\.\h\v\t]+)+|\.{2})\\?)*$')
EndFunc
;################################################################################
;
; Описание......: разделить путь на диск/папки/файл/тип
;
; Синтаксис.....: Path_Split_($_sPath)
;
; Параметры.....: $_sPath = путь который будет разделен
;
; Результат.....: возвращает массив,
; [0] = $_sPath
; [1] = диск:\
; [2] = папки\
; [3] = файл
; [4] = .тип
;
; Примечание....: рекомендуется указывать в $_sPath полный, правильный путь
;
; если $_sPath заканчивается косой чертой "\"
; то это будет считаться папкой, а не файлом
;
; если $_sPath начинается с косой черты "\"
; то "\" будет считаться диском
;
;################################################################################
Func Path_Split_($_sPath)
Local $_aPath = StringRegExp($_sPath, '^((?:[[:alpha:]]:)?\\?)?((?:[^\\]+\\)*)(?:([^\\]*?)((?:\.[^\h\.]+)?))$', 2)
If @error Then Dim $_aPath[5]
Return $_aPath
EndFunc