[Rust] 파일 입출력

파일 입출력 모듈은 std::fs다.

일단 텍스트를 하나 써보자

use std::fs;

fn main()
{
    fs::write("text.txt", "안녕하시오")
        .expect("쓰기 실패");
    println!("쓰기 성공");
}

잘 된다.

그럼 이걸 다시 수정해서 읽어보자
read는 읽은걸 Result로 덮어서 반환한다.

use std::fs;

fn main()
{
    let input = fs::read("text.txt").expect("읽기 실패");
    let input = String::from_utf8(input).expect("변환 실패");

    println!("읽기 성공: {}", input);
}


파일 삭제함수도 있다. 방금 만들었던 텍스트 파일을 지워본다.

use std::fs;

fn main()
{
    fs::remove_file("text.txt").expect("삭제 실패");

    println!("삭제 성공");
}

그리고 특정 디렉터리의 목록을 불러오는 놈도 있다.

use std::fs;

fn main()
{
    let dir = fs::read_dir("C:/Program Files").expect("읽기 실패");

    for entry in dir {
        let filename = entry.unwrap().file_name();
        println!("{}", filename.to_str().unwrap());
    };
}

파일 정보를 확인하는 기능도 있다.

use std::fs;

fn main()
{
    let data
        = fs::metadata("C:/Program Files/Java/jdk-10.0.1/bin/java.exe")
            .expect("확인 실패");

    if data.is_dir() { println!("이것은 디렉터리요"); }
    else { println!("이것은 디렉터리가 아니요."); }

    if data.is_file() { println!("이것은 파일이요"); }
    else { println!("이것은 파일이 아니요"); }

    println!("파일의 크기는 {}바이트요", data.len());
}


이외에도 rename, copy 등 편리한 기능들이 많다. 잘 찾아보길 바란다.
https://doc.rust-lang.org/std/fs/index.html