Files
Чтение текста из файлов в строку
Для чтения файлов, нужно сначала добавить несколько методов из библиотек: FIle - открытие файлов и Read - чтение, который входит в prelude.
se std::fs::File; // импорт File
use std::io::prelude::*; // импорт Read
fn main() {
// читаемый файл находится в корне проекта.
let mut file = File::open("access.log.10").expect("File not opened!");
let mut contents = String::new(); // закачать файл в переменную-строку
file.read_to_string(&mut contents).expect("Cannot read file!");
println!("File contents: \n\n{}",contents);
}
Чтение текста из файла в буффер по строчкам
Нужно добавить к библиотеке FIle также библиотеку организации буффера чтения, а также обработать ошибки открытия файла и чтения.
use std::{env, error, fs, io};
use std::io::BufRead;
fn main() -> Result<(), Box<dyn error::Error>> { //простой сбор ошибок - Boxing
let args :Vec<String> = env::args().collect(); //путь к файлу в параметре
if args.len() != 2 { // проверяем, что пользователь ввёл путь к файлу
println!("Program usage:");
println!("program <file path>");
return Ok(());
}
let file_path = &args[1]; // записываем путь к файлу
let filter_file = fs::File::open(file_path)?; // открываем файл
let contents = io::BufReader::new(&filter_file); // организуем буффер
for line in contents.lines() { // читаем построково из буффера
let line = line?;
println!("{}",line.to_string());
}
Ok(())
}
Запись в файлы
use std::fs::File;
use std::io::prelude::*;
fn main() {
let mut file = File::create("report.log").expect("File not created!");
file.write_all(b"report.log");
}