std/paths
SourceEditЭтот модуль реализует обработку путей.
См. также:
- модуль files для доступа к файлам
Импорты
- osseps, envvars, osappdirs, pathnorm, hashes, sugar, strutils, ospaths2
Типы
Процедуры
func `/`(head, tail: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Соединяет два имени каталогов в одно.
Возвращает нормализованное конкатенацию путей
headиtail, сохраняя наличие или отсутствие конечного слеша уtail(или, если tail пустая, наличие слеша у head).См. также:
Исходный код Редактировать func `/../`(head, tail: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
То же, что и
parentDir(head) / tail, если нет родительского каталога. В противном случае выполняетсяhead / tail.См. также:
Исходный код Редактировать func `==`(x, y: Path): bool {.inline, ...raises: [], tags: [], forbids: [].}-
Сравнивает два пути.
В случае чувствительного к регистру файловой системы сравнение происходит чувствительно к регистру, в противном случае — нечувствительно.
Исходный код Редактировать proc absolutePath(path: Path; root = getCurrentDir()): Path {. ...raises: [ValueError], tags: [], forbids: [].}-
Возвращает абсолютный путь к
path, с корнем вroot(который должен быть абсолютным; по умолчанию: текущий каталог). Еслиpathабсолютный, возвращается он, игнорируяroot.См. также:
Исходный код Редактировать func add(x: var Path; y: Path) {.borrow, ...raises: [], tags: [], forbids: [].}- Исходный код Редактировать
func addFileExt(filename: Path; ext: string): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Добавляет расширение файла
extкfilename, если уfilenameещё нет расширения.Extдолжно быть указано без начального'.', так как некоторые файловые системы могут использовать другой символ. (Хотя мне не известны такие случаи.)См. также:
Исходный код Редактировать func changeFileExt(filename: Path; ext: string): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Изменяет расширение файла на
ext.Если у
filenameнет расширения,extбудет добавлено. Еслиext== "" то любое расширение удаляется.Extдолжно быть указано без начального'.', так как некоторые файловые системы могут использовать другой символ. (Хотя мне не известны такие случаи.)См. также:
Исходный код Редактировать proc expandTilde(path: Path): Path {.inline, ...tags: [ReadEnvEffect, ReadIOEffect], raises: [], forbids: [].}-
Расширяет
~или путь, начинающийся с~/, до полного пути, заменяя~на getHomeDir() (в противном случае возвращаетpathбез изменений).Windows: эта поддержка сохранена, несмотря на то, что в Windows нет такой конвенции; также обрабатываются как
~/, так и~\.Пример:
import std/appdirs assert expandTilde(Path("~") / Path("appname.cfg")) == getHomeDir() / Path("appname.cfg") assert expandTilde(Path("~/foo/bar")) == getHomeDir() / Path("foo/bar") assert expandTilde(Path("/foo/bar")) == Path("/foo/bar")Исходный код Редактировать func extractFilename(path: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Извлекает имя файла из заданного
path.Это то же, что и
name & extиз процедуры splitFile(path) .См. также:
Исходный код Редактировать proc getCurrentDir(): Path {.inline, ...tags: [], raises: [OSError], forbids: [].}-
Возвращает текущий рабочий каталог, т.е. каталог, в котором запущена исполняемая программа.
Таким образом, путь, возвращаемый этой процедурой, определяется во время выполнения.
См. также:
- процедуру getHomeDir
- процедуру getConfigDir
- процедуру getTempDir
- процедуру setCurrentDir
- шаблон currentSourcePath
- процедуру getProjectPath
func hash(x: Path): Hash {....raises: [], tags: [], forbids: [].}- Исходный код Редактировать
func isAbsolute(path: Path): bool {.inline, ...raises: [], tags: [], forbids: [].}-
Проверяет, является ли заданный
pathабсолютным.В Windows сетевые пути также считаются абсолютными.
Исходный код Редактировать proc isRelativeTo(path: Path; base: Path): bool {.inline, ...raises: [Exception], tags: [RootEffect], forbids: [].}- Возвращает true, если
pathявляется относительным кbase. Исходный код Редактировать func isRootDir(path: Path): bool {.inline, ...raises: [], tags: [], forbids: [].}- Проверяет, является ли заданный
pathкорневым каталогом. Исходный код Редактировать func lastPathPart(path: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Аналогично процедуре extractFilename, но игнорирует конечный разделитель каталога; также известна как имя_файла в некоторых других языках.
См. также:
Исходный код Редактировать proc normalizeExe(file: var Path) {.borrow, ...raises: [], tags: [], forbids: [].}- Исходный код Редактировать
proc normalizePath(path: var Path) {.borrow, ...raises: [], tags: [], forbids: [].}- Исходный код Редактировать
proc normalizePathEnd(path: var Path; trailingSep = false) {.borrow, ...raises: [], tags: [], forbids: [].}- Исходный код Редактировать
func parentDir(path: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Возвращает родительский каталог
path.Это аналогично
splitPath(path).head, когдаpathне заканчивается символом разделителя каталогов, но также обрабатывает нормализацию путей. Остаток можно получить с помощью lastPathPart(path) proc.См. также:
Исходный код Редактировать proc relativePath(path, base: Path; sep = DirSep): Path {.inline, ...raises: [Exception], tags: [RootEffect], forbids: [].}-
Преобразует
pathв путь, относительный кbase.Символ разделителя каталогов
sep(по умолчанию: DirSep) используется для нормализации путей. Это может быть полезно, чтобы убедиться, что относительный путь содержит только'/', что позволит его использовать в URL.В Windows, если корни
pathиbaseразличны, возвращаетpathкак есть, так как создание относительного пути невозможно. Это означает, что может быть возвращён абсолютный путь.См. также:
Исходный код Редактировать func splitFile(path: Path): tuple[dir, name: Path, ext: string] {.inline, ...raises: [], tags: [], forbids: [].}-
Разделяет имя файла на
(dir, name, extension)кортеж.dirне заканчивается на DirSep, если это не/.extensionвключает начальную точку.Если у
pathнет расширения,ext— пустая строка. Если уpathнет компонента каталога,dir— пустая строка. Если уpathнет компонента имени файла,nameиext— пустые строки.См. также:
Исходный код Редактировать func splitPath(path: Path): tuple[head, tail: Path] {.inline, ...raises: [], tags: [], forbids: [].}-
Разделяет каталог на
(head, tail)кортеж, так чтоhead / tail == path(кроме особых случаев, таких как "/usr").См. также:
Исходный код Редактировать func tailDir(path: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Возвращает хвостовую часть
path.См. также:
Исходный код Редактировать func unixToNativePath(path: Path; drive = Path("")): Path {.inline, ...raises: [], tags: [], forbids: [].}-
Преобразует путь в формате UNIX в системный.
В UNIX-подобной системе ничего не делает. В противном случае преобразует
'/','.','..'в соответствующие элементы.В системах с концепцией "дисков"
Исходный код Редактироватьdriveиспользуется для определения метки диска, которая должна использоваться при преобразовании абсолютного пути.driveпо умолчанию соответствует диску текущей рабочей директории, и игнорируется в системах без концепции "дисков".
Итераторы
iterator parentDirs(path: Path; fromRoot = false; inclusive = true): Path {. ...raises: [], tags: [], forbids: [].}-
Перебирает все родительские каталоги заданного
path.Если
fromRootравно true (по умолчанию false), обход начнется с корневого каталога файловой системы. Еслиinclusiveравно true (по умолчанию), исходный аргумент будет включён в обход.Относительные пути этим итератором не будут расширяться. Вместо этого он будет перебирать только каталоги, присутствующие в относительном пути.
См. также:
Исходный код Редактировать
Шаблоны
template `$`(x: Path): string
- Исходный код Редактировать
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/paths.html