std/asyncfile
Source Edit
Этот модуль реализует асинхронное чтение и запись файлов.
import std/[asyncfile, asyncdispatch, os]
proc main() {.async.} =
var file = openAsync(getTempDir() / "foobar.txt", fmReadWrite)
await file.write("test")
file.setFilePos(0)
let data = await file.readAll()
doAssert data == "test"
file.close()
waitFor main() Импорты
asyncdispatch, os, winlean
Типы
Процедуры
proc close(f: AsyncFile) {....raises: [OSError], tags: [], forbids: [].} - Закрывает указанный файл. Source Edit
proc getFilePos(f: AsyncFile): int64 {....raises: [], tags: [], forbids: [].} - Возвращает текущую позицию указателя файла, используемого для чтения из указанного файла. Первый байт файла имеет индекс ноль. Source Edit
proc getFileSize(f: AsyncFile): int64 {....raises: [OSError], tags: [], forbids: [].} - Возвращает размер указанного файла. Source Edit
proc newAsyncFile(fd: AsyncFD): AsyncFile {....raises: [OSError], tags: [],
forbids: [].} - Создаёт
AsyncFile с предварительно открытым дескриптором файла fd. Source Edit proc openAsync(filename: string; mode = fmRead): AsyncFile {....raises: [OSError],
tags: [], forbids: [].} - Асинхронно открывает файл, указанный по пути в
filename, используя указанный режим файла mode. Source Edit proc read(f: AsyncFile; size: int): Future[string] {.
...raises: [ValueError, Exception], tags: [RootEffect], forbids: [].} -
Асинхронно считывает size байтов из указанного файла, начиная с текущей позиции указателя файла. size должно быть больше нуля.
Если указатель файла прошёл конец файла, возвращается пустая строка.
Source Edit proc readAll(f: AsyncFile): Future[string] {....stackTrace: false,
raises: [Exception, ValueError], tags: [RootEffect], forbids: [].} - Считывает все данные из указанного файла. Source Edit
proc readBuffer(f: AsyncFile; buf: pointer; size: int): Future[int] {.
...raises: [ValueError, Exception], tags: [RootEffect], forbids: [].} -
Асинхронно считывает size байтов из указанного файла, начиная с текущей позиции указателя файла.
Если указатель файла прошёл конец файла, возвращается ноль, и в buf не считывается ни один байт.
Source Edit proc readLine(f: AsyncFile): Future[string] {....stackTrace: false,
raises: [Exception, ValueError], tags: [RootEffect], forbids: [].} - Асинхронно считывает одну строку из указанного файла. Source Edit
proc readToStream(f: AsyncFile; fs: FutureStream[string]): owned(
Future[void]) {....stackTrace: false, raises: [Exception], tags: [RootEffect],
forbids: [].} - Записывает данные в указанный будущий поток по мере чтения из файла. Source Edit
proc setFilePos(f: AsyncFile; pos: int64) {....raises: [], tags: [], forbids: [].} - Устанавливает позицию указателя файла, используемого для операций чтения/записи. Первый байт файла имеет индекс ноль. Source Edit
proc setFileSize(f: AsyncFile; length: int64) {....raises: [OSError], tags: [],
forbids: [].} - Установить длину файла. Source Edit
proc write(f: AsyncFile; data: string): Future[void] {....raises: [Exception],
tags: [RootEffect], forbids: [].} -
Асинхронно записывает data в указанный файл.
Возвращаемое будущее завершится, когда все данные будут записаны в указанный файл.
Source Edit proc writeBuffer(f: AsyncFile; buf: pointer; size: int): Future[void] {.
...raises: [Exception], tags: [RootEffect], forbids: [].} -
Асинхронно записывает size байтов из buf в указанный файл.
Возвращаемое будущее завершится, когда все данные будут записаны в указанный файл.
Source Edit proc writeFromStream(f: AsyncFile; fs: FutureStream[string]): owned(
Future[void]) {....stackTrace: false, raises: [Exception], tags: [RootEffect],
forbids: [].} -
Читает данные из указанного будущего потока до его завершения. Прочитанные данные сразу записываются в файл и освобождаются из памяти.
Эта процедура идеально подходит для сохранения потоковых данных в файл без потери памяти.
Source Edit