Spec-Zone.ru › Nim

std/paths

SourceEdit

Этот модуль реализует обработку путей.

См. также:

  • модуль files для доступа к файлам

Импорты

osseps, envvars, osappdirs, pathnorm, hashes, sugar, strutils, ospaths2

Типы

Path = distinct string
Source Edit

Процедуры

func `/`(head, tail: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}

Соединяет два имени каталогов в одно.

Возвращает нормализованное конкатенацию путей head и tail, сохраняя наличие или отсутствие конечного слеша у tail (или, если tail пустая, наличие слеша у head).

См. также:

  • процедуру splitPath
  • процедуру uri.combine
  • процедуру uri./
Исходный код Редактировать
func `/../`(head, tail: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}

То же, что и parentDir(head) / tail, если нет родительского каталога. В противном случае выполняется head / tail.

См. также:

  • / proc
  • процедуру parentDir
Исходный код Редактировать
func `==`(x, y: Path): bool {.inline, ...raises: [], tags: [], forbids: [].}

Сравнивает два пути.

В случае чувствительного к регистру файловой системы сравнение происходит чувствительно к регистру, в противном случае — нечувствительно.

Исходный код Редактировать
proc absolutePath(path: Path; root = getCurrentDir()): Path {.
    ...raises: [ValueError], tags: [], forbids: [].}

Возвращает абсолютный путь к path, с корнем в root (который должен быть абсолютным; по умолчанию: текущий каталог). Если path абсолютный, возвращается он, игнорируя root.

См. также:

  • процедуру normalizePath
Исходный код Редактировать
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 должно быть указано без начального '.', так как некоторые файловые системы могут использовать другой символ. (Хотя мне не известны такие случаи.)

См. также:

  • процедуру splitFile
  • процедуру extractFilename
  • процедуру lastPathPart
  • процедуру changeFileExt
Исходный код Редактировать
func changeFileExt(filename: Path; ext: string): Path {.inline, ...raises: [],
    tags: [], forbids: [].}

Изменяет расширение файла на ext.

Если у filename нет расширения, ext будет добавлено. Если ext == "" то любое расширение удаляется.

Ext должно быть указано без начального '.', так как некоторые файловые системы могут использовать другой символ. (Хотя мне не известны такие случаи.)

См. также:

  • процедуру splitFile
  • процедуру extractFilename
  • процедуру lastPathPart
  • процедуру addFileExt
Исходный код Редактировать
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) .

См. также:

  • процедуру splitFile
  • процедуру lastPathPart
  • процедуру changeFileExt
  • процедуру addFileExt
Исходный код Редактировать
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, но игнорирует конечный разделитель каталога; также известна как имя_файла в некоторых других языках.

См. также:

  • процедуру splitFile
  • процедуру extractFilename
  • процедуру changeFileExt
  • процедуру addFileExt
Исходный код Редактировать
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.

См. также:

  • relativePath proc
  • splitPath proc
  • tailDir proc
  • parentDirs iterator
Исходный код Редактировать
proc relativePath(path, base: Path; sep = DirSep): Path {.inline,
    ...raises: [Exception], tags: [RootEffect], forbids: [].}

Преобразует path в путь, относительный к base.

Символ разделителя каталогов sep (по умолчанию: DirSep) используется для нормализации путей. Это может быть полезно, чтобы убедиться, что относительный путь содержит только '/', что позволит его использовать в URL.

В Windows, если корни path и base различны, возвращает path как есть, так как создание относительного пути невозможно. Это означает, что может быть возвращён абсолютный путь.

См. также:

  • splitPath proc
  • parentDir proc
  • tailDir proc
Исходный код Редактировать
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 — пустые строки.

См. также:

  • extractFilename proc
  • lastPathPart proc
  • changeFileExt proc
  • addFileExt proc
Исходный код Редактировать
func splitPath(path: Path): tuple[head, tail: Path] {.inline, ...raises: [],
    tags: [], forbids: [].}

Разделяет каталог на (head, tail) кортеж, так что head / tail == path (кроме особых случаев, таких как "/usr").

См. также:

  • add proc
  • / proc
  • /../ proc
  • relativePath proc
Исходный код Редактировать
func tailDir(path: Path): Path {.inline, ...raises: [], tags: [], forbids: [].}

Возвращает хвостовую часть path.

См. также:

  • relativePath proc
  • splitPath proc
  • parentDir proc
Исходный код Редактировать
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 (по умолчанию), исходный аргумент будет включён в обход.

Относительные пути этим итератором не будут расширяться. Вместо этого он будет перебирать только каталоги, присутствующие в относительном пути.

См. также:

  • parentDir proc
Исходный код Редактировать

Шаблоны

template `$`(x: Path): string
Исходный код Редактировать

© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/paths.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API