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.Операция не завершается ошибкой, если каталог уже существует, т.к. в большинстве случаев это не ошибка.
См. также:
Исходный код Редактировать proc existsOrCreateDir(dir: string): bool {....gcsafe, extern: "nos$1", tags: [WriteDirEffect, ReadDirEffect], raises: [OSError, IOError], forbids: [].}-
Проверяет, существует ли каталог
dir, и создаёт его, если нет.Не создаёт родительские каталоги (возбуждает исключение
OSError, если родительские каталоги не существуют). Возвращаетtrue, если каталог уже существует, иfalse, если нет.См. также:
Исходный код Редактировать proc moveDir(source, dest: string) {....tags: [ReadIOEffect, WriteIOEffect], raises: [OSError, IOError], forbids: [].}-
Перемещает каталог из
sourceвdest.Символьные ссылки не отслеживаются: если
sourceсодержит символьные ссылки, они перемещаются сами, а не их целевые ссылки.Если произойдёт ошибка, будет возбуждено исключение
OSError.См. также:
Исходный код Редактировать 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не может быть установлен.См. также:
Исходный код Редактировать
Итераторы
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"См. также: Исходный код Изменить - Если
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следовать за символическими ссылками на каталоги См. также:
Исходный код Изменить iterator walkDirs(pattern: string): string {....tags: [ReadDirEffect], raises: [OSError], forbids: [].}-
Итерируется по всем каталогам, которые соответствуют
pattern.В POSIX используется вызов glob.
patternзависит от ОС, но по крайней мере поддерживается обозначение"*.ext".См. также:
Пример:
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".См. также:
Пример:
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".См. также:
Пример:
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