Функция read
pub async fn read(path: impl AsRef<Path>) -> Result<Vec<u8>>
fs.Считывает всё содержимое файла в вектор байтов.
Это асинхронная версия функции std::fs::read.
Эта вспомогательная функция позволяет использовать File::open и read_to_end с меньшим количеством импортов и без промежуточной переменной. Она предварительно выделяет буфер на основе размера файла, если он известен, поэтому обычно работает быстрее, чем чтение в вектор, созданный с помощью Vec::new().
Эта операция выполняется путём запуска эквивалентной блокирующей операции в отдельном пуле потоков с помощью spawn_blocking.
Ошибки
Эта функция вернёт ошибку, если path ещё не существует. Также могут возвращаться другие ошибки в соответствии с поведением OpenOptions::open.
Также будет возвращена ошибка, если при чтении возникнет ошибка типа, отличного от ErrorKind::Interrupted.
Поддержка io_uring
В Linux для выполнения системных вызовов также можно использовать io_uring. Чтобы включить io_uring, необходимо указать флаг --cfg tokio_unstable во время компиляции, включить функцию cargo io-uring и задать параметр среды выполнения Builder::enable_io_uring.
Поддержка io_uring в настоящее время является экспериментальной, поэтому её поведение может измениться или она может быть удалена в будущих версиях.
Примеры
use tokio::fs;
use std::net::SocketAddr;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + 'static>> {
let contents = fs::read("address.txt").await?;
let foo: SocketAddr = String::from_utf8_lossy(&contents).parse()?;
Ok(())
}
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/fs/fn.read.html