Помимо чтения и записи в консоль, 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 . При выполнении файла передаются два аргумента командной строки: