18.4.1 open
정적 메소드 open
는 파일을 읽기-전용 모드로 열람할 수 있다.
File
은 리소스 파일 설명자를 소유하고 파일이 삭제 됐을 때 파일을 닫는 처리를 한다.
// open.rs
use std::error::Error;
use std::fs::File;
use std::io::prelude::*;
use std::path::Path;
fn main() {
// 원하는 파일에 대해 Path를 만든다.
let path = Path::new("hello.txt");
let display = path.display();
// path를 읽기-전용 모드로 열어, `io::Result<File>`를 반환한다.
let mut file = match File::open(&path) {
// `io::Error`의 `description` 메소드는 에러의 설명을 string으로 반환한다.
Err(why) => panic!("couldn't open {}: {}", display,
why.description()),
Ok(file) => file,
};
// 파일 내용을 string으로 읽어, `io::Result<usize>`를 반환한다.
let mut s = String::new();
match file.read_to_string(&mut s) {
Err(why) => panic!("couldn't read {}: {}", display,
why.description()),
Ok(_) => print!("{} contains:\n{}", display, s),
}
// `file`이 범위에서 벗어나면, "hello.txt" 파일은 닫히게 된다.
}
성공적으로 수행되면 이와 같이 출력된다:
$ echo "Hello World!" > hello.txt
$ rustc open.rs && ./open
hello.txt contains:
Hello World!
(당신에게 권고하는 사항은 상기 예제에서 다양한 실패 상황에서 테스트하라는 것: hello.txt
가 존재하지 않거나, hello.txt
가 읽을 수 없거나, 기타 등등)