Spec-Zone.ru › Nim

std/private/osdirs

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

Импорты

oserrors, ospaths2, osfiles, oscommon, winlean, times

Процедуры

proc copyDir(source, dest: string; skipSpecial = false) {....gcsafe,
    extern: "nos$1", tags: [ReadDirEffect, WriteIOEffect, ReadIOEffect], gcsafe,
    raises: [OSError, IOError], forbids: [].}

Копирует директорию из source в dest.

В системах, отличных от Windows, символьные ссылки копируются как символьные ссылки. В Windows символьные ссылки пропускаются.

Если skipSpecial равно true, то (кроме всех каталогов) на Unix будут копироваться только обычные файлы (без специальных "файлов", таких как FIFO, файлы устройств и т. д.).

Если произойдёт ошибка, будет возбуждено исключение OSError.

В Windows эта процедура скопирует атрибуты из source в dest.

В других системах созданные файлы и каталоги будут унаследовать стандартные права доступа вновь созданного файла/каталога для пользователя. Используйте процедуру copyDirWithPermissions, чтобы сохранить атрибуты рекурсивно в этих системах.

См. также:

  • copyDirWithPermissions
  • osfiles: copyFile
  • osfiles: copyFileWithPermissions
  • removeDir
  • existsOrCreateDir
  • createDir
  • moveDir
Исходный код Редактировать
proc copyDirWithPermissions(source, dest: string; ignorePermissionErrors = true;
                            skipSpecial = false) {....gcsafe, extern: "nos$1",
    tags: [ReadDirEffect, WriteIOEffect, ReadIOEffect], gcsafe,
    raises: [OSError, IOError], forbids: [].}

Копирует директорию из source в dest, сохраняя права доступа к файлам.

В системах, отличных от Windows, символьные ссылки копируются как символьные ссылки. В Windows символьные ссылки пропускаются.

Если skipSpecial равно true, то (кроме всех каталогов) на Unix будут копироваться только обычные файлы (без специальных "файлов", таких как FIFO, файлы устройств и т. д.).

Если произойдёт ошибка, будет возбуждено исключение OSError. Это обертка над процедурами copyDir и osfiles: copyFileWithPermissions в системах, отличных от Windows.

В Windows эта процедура просто обертка для copyDir, так как эта процедура уже копирует атрибуты.

В системах, отличных от Windows, права доступа копируются после того, как файл или каталог были скопированы, что может произойти не атомарно и привести к гонке. Если ignorePermissionErrors равно true (по умолчанию), ошибки при чтении/установке атрибутов файлов будут проигнорированы, в противном случае будет возбуждено исключение OSError.

См. также:

  • copyDir
  • osfiles: copyFile
  • osfiles: copyFileWithPermissions
  • removeDir
  • moveDir
  • existsOrCreateDir
  • createDir
Исходный код Редактировать
proc createDir(dir: string) {....gcsafe, extern: "nos$1",
                              tags: [WriteDirEffect, ReadDirEffect],
                              raises: [OSError, IOError], forbids: [].}

Создаёт каталог dir.

Каталог может содержать несколько подкаталогов, которые ещё не существуют. Полный путь будет создан. Если произойдёт ошибка, будет возбуждено исключение OSError.

Операция не завершается ошибкой, если каталог уже существует, т.к. в большинстве случаев это не ошибка.

См. также:

  • removeDir
  • existsOrCreateDir
  • copyDir
  • copyDirWithPermissions
  • moveDir
Исходный код Редактировать
proc existsOrCreateDir(dir: string): bool {....gcsafe, extern: "nos$1",
    tags: [WriteDirEffect, ReadDirEffect], raises: [OSError, IOError],
    forbids: [].}

Проверяет, существует ли каталог dir, и создаёт его, если нет.

Не создаёт родительские каталоги (возбуждает исключение OSError, если родительские каталоги не существуют). Возвращает true, если каталог уже существует, и false, если нет.

См. также:

  • removeDir
  • createDir
  • copyDir
  • copyDirWithPermissions
  • moveDir
Исходный код Редактировать
proc moveDir(source, dest: string) {....tags: [ReadIOEffect, WriteIOEffect],
                                     raises: [OSError, IOError], forbids: [].}

Перемещает каталог из source в dest.

Символьные ссылки не отслеживаются: если source содержит символьные ссылки, они перемещаются сами, а не их целевые ссылки.

Если произойдёт ошибка, будет возбуждено исключение OSError.

См. также:

  • osfiles: moveFile
  • copyDir
  • copyDirWithPermissions
  • removeDir
  • existsOrCreateDir
  • createDir
Исходный код Редактировать
proc removeDir(dir: string; checkDir = false) {....gcsafe, extern: "nos$1",
    tags: [WriteDirEffect, ReadDirEffect], gcsafe, raises: [OSError],
    forbids: [].}

Удаляет каталог dir включая все вложенные подкаталоги и файлы в dir (рекурсивно).

Если произойдёт ошибка, будет возбуждено исключение OSError. Это не вызывает ошибки, если каталог никогда не существовал, если checkDir = true.

См. также:

  • osfiles: tryRemoveFile
  • osfiles: removeFile
  • existsOrCreateDir
  • createDir
  • copyDir
  • copyDirWithPermissions
  • moveDir
Исходный код Редактировать
proc setCurrentDir(newDir: string) {.inline, ...tags: [], raises: [OSError],
                                     forbids: [].}

Устанавливает текущий каталог. OSError возбуждается, если newDir не может быть установлен.

См. также:

  • appdirs: getHomeDir
  • appdirs: getConfigDir
  • appdirs: getTempDir
  • paths: getCurrentDir
Исходный код Редактировать

Итераторы

iterator walkDir(dir: string; relative = false; checkDir = false;
                 skipSpecial = false): tuple[kind: PathComponent, path: string] {.
    ...tags: [ReadDirEffect], raises: [OSError], forbids: [].}

Перебирает директорию dir и возвращает каждый каталог или файл в dir. Возвращаются тип компонента и полный путь для каждого элемента.

Перебор не рекурсивный.

  • Если relative истинно (по умолчанию: ложно), результирующий путь сокращается до относительного пути к dir, в противном случае возвращается полный путь.
  • Если checkDir истинно, OSError генерируется, когда dir не существует.
  • Если skipSpecial истинно, то (помимо всех каталогов) будут возвращаться только обычные файлы (без специальных "файловых" объектов, таких как FIFO, файлы устройств и т. п.) в Unix.

Пример:

Эта структура каталогов:

dirA / dirB / fileB1.txt
     / dirC
     / fileA1.txt
     / fileA2.txt

и этот код:

Пример: cmd: -r:off

import std/[strutils, sugar]
# note: order is not guaranteed
# this also works at compile time
assert collect(for k in walkDir("dirA"): k.path).join(" ") ==
                      "dirA/dirB dirA/dirC dirA/fileA2.txt dirA/fileA1.txt"
См. также:
  • итератор walkPattern
  • итератор walkFiles
  • итератор walkDirs
  • итератор walkDirRec
Исходный код Изменить
iterator walkDirRec(dir: string; yieldFilter = {pcFile}; followFilter = {pcDir};
                    relative = false; checkDir = false; skipSpecial = false): string {.
    ...tags: [ReadDirEffect], raises: [OSError], forbids: [].}

Рекурсивно перебирает директорию dir и возвращает каждый файл или каталог в dir.

Параметры relative, checkdir, skipSpecial объяснены в описании итератора walkDir.

Предупреждение: Изменение структуры каталогов во время прохода итератора может привести к неопределенному поведению!

Перебор рекурсивный. followFilter управляет поведением итератора:

yieldFilter значение
pcFile возвращать реальные файлы (по умолчанию)
pcLinkToFile возвращать символические ссылки на файлы
pcDir возвращать реальные каталоги
pcLinkToDir возвращать символические ссылки на каталоги
followFilter значение
pcDir следовать за реальными каталогами (по умолчанию)
pcLinkToDir следовать за символическими ссылками на каталоги

См. также:

  • итератор walkPattern
  • итератор walkFiles
  • итератор walkDirs
  • итератор walkDir
Исходный код Изменить
iterator walkDirs(pattern: string): string {....tags: [ReadDirEffect],
    raises: [OSError], forbids: [].}

Итерируется по всем каталогам, которые соответствуют pattern.

В POSIX используется вызов glob. pattern зависит от ОС, но по крайней мере поддерживается обозначение "*.ext".

См. также:

  • итератор walkPattern
  • итератор walkFiles
  • итератор walkDir
  • итератор walkDirRec

Пример:

import std/os
import std/sequtils
let paths = toSeq(walkDirs("lib/pure/*")) # works on Windows too
assert "lib/pure/concurrency".unixToNativePath in paths
Исходный код Изменить
iterator walkFiles(pattern: string): string {....tags: [ReadDirEffect],
    raises: [OSError], forbids: [].}

Итерируется по всем файлам, которые соответствуют pattern.

В POSIX используется вызов glob. pattern зависит от ОС, но по крайней мере поддерживается обозначение "*.ext".

См. также:

  • итератор walkPattern
  • итератор walkDirs
  • итератор walkDir
  • итератор walkDirRec

Пример:

import std/os
import std/sequtils
assert "lib/pure/os.nim".unixToNativePath in toSeq(walkFiles("lib/pure/*.nim")) # works on Windows too
Исходный код Изменить
iterator walkPattern(pattern: string): string {....tags: [ReadDirEffect],
    raises: [OSError], forbids: [].}

Итерируется по всем файлам и каталогам, которые соответствуют pattern.

В POSIX используется вызов glob. pattern зависит от ОС, но по крайней мере поддерживается обозначение "*.ext".

См. также:

  • итератор walkFiles
  • итератор walkDirs
  • итератор walkDir
  • итератор walkDirRec

Пример:

import std/os
import std/sequtils
let paths = toSeq(walkPattern("lib/pure/*")) # works on Windows too
assert "lib/pure/concurrency".unixToNativePath in paths
assert "lib/pure/os.nim".unixToNativePath in paths
Исходный код Изменить

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

Spec-Zone.ru

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