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");  
}