This module implements asynchronous file reading and writing.
import 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()
AsyncFile = ref object fd: AsyncFD offset: int64
proc getFileSize(f: AsyncFile): int64 {.raises: [OSError], tags: [].}
proc newAsyncFile(fd: AsyncFD): AsyncFile {.raises: [Exception, OSError], tags: [RootEffect].}
proc openAsync(filename: string; mode = fmRead): AsyncFile {. raises: [OSError, Exception], tags: [ReadDirEffect, RootEffect].}
filename
using the specified mode
asynchronously. proc readBuffer(f: AsyncFile; buf: pointer; size: int): Future[int] {. raises: [FutureError, Exception], tags: [RootEffect].}
Read size
bytes from the specified file asynchronously starting at the current position of the file pointer.
If the file pointer is past the end of the file then zero is returned and no bytes are read into buf
proc read(f: AsyncFile; size: int): Future[string] {.raises: [Exception, FutureError], tags: [RootEffect].}
Read size
bytes from the specified file asynchronously starting at the current position of the file pointer.
If the file pointer is past the end of the file then an empty string is returned.
proc readLine(f: AsyncFile): Future[string] {.raises: [FutureError], tags: [RootEffect].}
proc getFilePos(f: AsyncFile): int64 {.raises: [], tags: [].}
proc setFilePos(f: AsyncFile; pos: int64) {.raises: [], tags: [].}
proc readAll(f: AsyncFile): Future[string] {.raises: [FutureError], tags: [RootEffect].}
proc writeBuffer(f: AsyncFile; buf: pointer; size: int): Future[void] {. raises: [FutureError, Exception], tags: [RootEffect].}
Writes size
bytes from buf
to the file specified asynchronously.
The returned Future will complete once all data has been written to the specified file.
proc write(f: AsyncFile; data: string): Future[void] {. raises: [Exception, FutureError], tags: [RootEffect].}
Writes data
to the file specified asynchronously.
The returned Future will complete once all data has been written to the specified file.
proc setFileSize(f: AsyncFile; length: int64) {.raises: [OSError], tags: [].}
proc close(f: AsyncFile) {.raises: [Exception, OSError], tags: [RootEffect].}
proc writeFromStream(f: AsyncFile; fs: FutureStream[string]): Future[void] {. raises: [FutureError], tags: [RootEffect].}
Reads data from the specified future stream until it is completed. The data which is read is written to the file immediately and freed from memory.
This procedure is perfect for saving streamed data to a file without wasting memory.
proc readToStream(f: AsyncFile; fs: FutureStream[string]): Future[void] {. raises: [FutureError], tags: [RootEffect].}
© 2006–2017 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/asyncfile.html