rust 读取文件

1、逐行读文本

use std::fs::File;
use std::io::{self, BufRead};
use std::path::Path;

fn main() {
    // File hosts must exist in current path before this produces output
    if let Ok(lines) = read_lines("./hosts") {
        // Consumes the iterator, returns an (Optional) String
        for line in lines {
            if let Ok(ip) = line {
                println!("{}", ip);
            }
        }
    }
}

// The output is wrapped in a Result to allow matching on errors
// Returns an Iterator to the Reader of the lines of the file.
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where P: AsRef<Path>, {
    let file = File::open(filename)?;
    Ok(io::BufReader::new(file).lines())
}

2 一次读入文本

use std::fs::File;
use std::io::prelude::*;
use std::path::Path;

fn main() {
    // Create a path to the desired myfile
    let path = Path::new("a.txt");
    let display = path.display();

    // Open the path in read-only mode, returns `io::Result<File>`
    let mut myfile = match File::open(&path) {
        Err(why) => panic!("couldn't open {}: {}", display, why),
        Ok(myfile) => myfile,
    };

    // Read the myfile contents into a string, returns `io::Result<usize>`
    let mut s = String::new();
    match myfile.read_to_string(&mut s) {
        Err(why) => panic!("couldn't read {}: {}", display, why),
        Ok(_) => print!("{} contains:
{}", display, s),
    }

    // `myfile` goes out of scope, and the "hello.txt" myfile gets closed
}

3  读取二进制文件 

use std::fs::File;
use std::env;
use std::io::prelude::*;
fn main() -> std::io::Result<()> {
    let mut param=env::args();
    if param.len() != 2{
        Err(std::io::Error::new(std::io::ErrorKind::Other,"usage:bintool inputfile"))
    }
    else{
        let _=param.next();
        let inputfile=param.next();
        let mut _inputfile = File::open(inputfile.unwrap())?;
        //let mut _outputfile= File::create(outputfile.unwrap())?;
        let mut buffer:[u8;16]=[0;16];
        while let std::io::Result::Ok(len) = _inputfile.read(&mut buffer){
            //println!("{}",len);
            if len == 0 {
                break;
            }
            else{
                for i in 0..len{
                    //_outputfile.write_fmt(format_args!("{:#02x} ",buffer[i]));
                    print!("{:02x} ",buffer[i]);
                }println!("
");
            }
        }
        Ok(())
    }
}

参考:https://doc.rust-lang.org/rust-by-example/std_misc/file/open.html

https://www.it610.com/article/1282640012466208768.htm

原文地址:https://www.cnblogs.com/pu369/p/15167406.html