Учебники

Rust — Файл ввода / вывода

Помимо чтения и записи в консоль, Rust позволяет читать и писать в файлы.

Структура File представляет файл. Это позволяет программе выполнять операции чтения-записи файла. Все методы в структуре File возвращают вариант перечисления io :: Result.

Обычно используемые методы структуры File перечислены в таблице ниже —

Sr.No модуль метод Подпись Описание
1 СТД :: фс :: Файловые открыть() pub fn open <P: AsRef> (путь: P) -> Результат Открытый статический метод может быть использован для открытия файла в режиме только для чтения.
2 СТД :: фс :: Файловые Создайте() pub fn create <P: AsRef> (путь: P) -> Результат Статический метод открывает файл в режиме только для записи. Если файл уже существовал, старый контент уничтожается. В противном случае создается новый файл.
3 станд :: фс :: remove_file удалить файл() pub fn remove_file <P: AsRef> (путь: P) -> Результат <()> Удаляет файл из файловой системы. Нет никаких гарантий, что файл будет немедленно удален.
4 СТД :: фс :: OpenOptions добавление () pub fn append (& mut self, append: bool) -> & mut OpenOptions Устанавливает опцию для режима добавления файла.
5 станд :: IO :: Записывает write_all () fn write_all (& mut self, buf: & [u8]) -> Result <()> Попытки записать весь буфер в эту запись.
6 станд :: IO :: Читать read_to_string () fn read_to_string (& mut self, buf: & mut String) -> Результат Читает все байты до EOF в этом источнике, добавляя их в buf.

Записать в файл

Давайте посмотрим на пример, чтобы понять, как написать файл.

Следующая программа создает файл «data.txt». Метод create () используется для создания файла. Метод возвращает дескриптор файла, если файл создан успешно. В последней строке функция write_all запишет байты во вновь созданный файл. Если какая-либо из операций завершается неудачей, функция wait () возвращает сообщение об ошибке.

use std::io::Write;
fn main() {
   let mut file = std::fs::File::create("data.txt").expect("create failed");
   file.write_all("Hello World".as_bytes()).expect("write failed");
   file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
   println!("data written to file" );
}

Выход

data written to file

Читать из файла

Следующая программа читает содержимое файла data.txt и выводит его на консоль. Функция «открыть» используется для открытия существующего файла. Абсолютный или относительный путь к файлу передается функции open () в качестве параметра. Функция open () выдает исключение, если файл не существует или если он недоступен по какой-либо причине. Если это удается, дескриптор файла для такого файла назначается переменной «file».

Функция read_to_string дескриптора file используется для чтения содержимого этого файла в строковую переменную.

use std::io::Read;

fn main(){
   let mut file = std::fs::File::open("data.txt").unwrap();
   let mut contents = String::new();
   file.read_to_string(&mut contents).unwrap();
   print!("{}", contents);
}

Выход

Hello World
TutorialsPoint

Удалить файл

В следующем примере для удаления файла используется функция remove_file (). Функция wait () возвращает пользовательское сообщение в случае возникновения ошибки.

use std::fs;
fn main() {
   fs::remove_file("data.txt").expect("could not remove file");
   println!("file is removed");
}

Выход

file is removed

Добавить данные в файл

Функция append () записывает данные в конец файла. Это показано в примере, приведенном ниже —

use std::fs::OpenOptions;
use std::io::Write;

fn main() {
   let mut file = OpenOptions::new().append(true).open("data.txt").expect(
      "cannot open file");
   file.write_all("Hello World".as_bytes()).expect("write failed");
   file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
   println!("file append success");
}

Выход

file append success

Скопируйте файл

В следующем примере содержимое файла копируется в новый файл.

use std::io::Read;
use std::io::Write;

fn main() {
   let mut command_line: std::env::Args = std::env::args();
   command_line.next().unwrap();
   // skip the executable file name
   // accept the source file
   let source = command_line.next().unwrap();
   // accept the destination file
   let destination = command_line.next().unwrap();
   let mut file_in = std::fs::File::open(source).unwrap();
   let mut file_out = std::fs::File::create(destination).unwrap();
   let mut buffer = [0u8; 4096];
   loop {
      let nbytes = file_in.read(&mut buffer).unwrap();
      file_out.write(&buffer[..nbytes]).unwrap();
      if nbytes < buffer.len() { break; }
   }
}

Выполните вышеуказанную программу как main.exe data.txt datacopy.txt . При выполнении файла передаются два аргумента командной строки: