HiveBrain v1.2.0
Get Started
← Back to all entries
snippetrustMinor

Read file contents to string safely

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
filereadcontentssafelystring

Problem

I've just started to teach myself Rust. I've written the following code to read a text file and store the contents in a String. Is this the typical way of doing this? Can anyone suggest any improvements to this?

use std::fs::File;
use std::io::Read;
use std::io;

fn main() {

    let file_name = "test.txt";

    let mut file_contents = String::new();

    match get_file_contents(file_name, &mut file_contents) {
        Ok(()) => (),
        Err(err) => panic!("{}", err)
    };

    println!("{}", file_contents);

}

fn get_file_contents(name: &str, mut contents: &mut String) -> Result {

    let mut f = try!(File::open(name));

    try!(f.read_to_string(&mut contents));

    Ok(())

}

Solution

You could return the string directly:

fn main() {
    let file_name = "test.txt";
    let file_contents = match get_file_contents(file_name) {
        Ok(s) => s,
        Err(err) => panic!("{}", err)
    };

    println!("{}", file_contents);
}

fn get_file_contents(name: &str) -> Result {
    let mut f = try!(File::open(name));
    let mut contents = String::new();

    try!(f.read_to_string(&mut contents));

    Ok(contents)
}


and unwrap if you don’t intend to handle the error usefully:

let file_contents = get_file_contents(file_name).unwrap();

Code Snippets

fn main() {
    let file_name = "test.txt";
    let file_contents = match get_file_contents(file_name) {
        Ok(s) => s,
        Err(err) => panic!("{}", err)
    };

    println!("{}", file_contents);
}

fn get_file_contents(name: &str) -> Result<String, io::Error> {
    let mut f = try!(File::open(name));
    let mut contents = String::new();

    try!(f.read_to_string(&mut contents));

    Ok(contents)
}
let file_contents = get_file_contents(file_name).unwrap();

Context

StackExchange Code Review Q#133715, answer score: 5

Revisions (0)

No revisions yet.