Module tokio::fs

source ·
Expand description

Asynchronous file and standard stream adaptation.

This module contains utility methods and adapter types for input/output to files or standard streams (Stdin, Stdout, Stderr), and filesystem manipulation, for use within (and only within) a Tokio runtime.

Tasks run by worker threads should not block, as this could delay servicing reactor events. Portable filesystem operations are blocking, however. This module offers adapters which use a blocking annotation to inform the runtime that a blocking operation is required. When necessary, this allows the runtime to convert the current thread from a worker to a backup thread, where blocking is acceptable.


Where possible, users should prefer the provided asynchronous-specific traits such as AsyncRead, or methods returning a Future or Poll type. Adaptions also extend to traits like std::io::Read where methods return std::io::Result. Be warned that these adapted methods may return std::io::ErrorKind::WouldBlock if a worker thread can not be converted to a backup thread immediately.

Warning: These adapters may create a large number of temporary tasks, especially when reading large files. When performing a lot of operations in one batch, it may be significantly faster to use spawn_blocking directly:

use tokio::fs::File;
use std::io::{BufReader, BufRead};
async fn count_lines(file: File) -> Result<usize, std::io::Error> {
    let file = file.into_std().await;
    tokio::task::spawn_blocking(move || {
        let line_count = BufReader::new(file).lines().count();


  • A builder for creating directories in various manners.
  • Entries returned by the ReadDir stream.
  • A reference to an open file on the filesystem.
  • Options and flags which can be used to configure how a file is opened.
  • Reads the entries in a directory.


  • Returns the canonical, absolute form of a path with all intermediate components normalized and symbolic links resolved.
  • Copies the contents of one file to another. This function will also copy the permission bits of the original file to the destination file. This function will overwrite the contents of to.
  • Creates a new, empty directory at the provided path.
  • Recursively creates a directory and all of its parent components if they are missing.
  • Creates a new hard link on the filesystem.
  • Given a path, queries the file system to get information about a file, directory, etc.
  • Reads the entire contents of a file into a bytes vector.
  • Returns a stream over the entries within a directory.
  • Reads a symbolic link, returning the file that the link points to.
  • Creates a future which will open a file for reading and read the entire contents into a string and return said string.
  • Removes an existing, empty directory.
  • Removes a directory at this path, after removing all its contents. Use carefully!
  • Removes a file from the filesystem.
  • Renames a file or directory to a new name, replacing the original file if to already exists.
  • Changes the permissions found on a file or a directory.
  • Creates a new symbolic link on the filesystem.
  • Queries the file system metadata for a path.
  • Returns Ok(true) if the path points at an existing entity.
  • Creates a future that will open a file for writing and write the entire contents of contents to it.