2025년 4월 26일 토요일

6-3강: 러스트 라이브러리(Fs, Path, PathBuf)

1. fs : 파일 시스템 관련 작업을 지원하는 표준 라이브러리

//fs 모듈을 사용하여 파일을 생성하고 읽는 예제
use std::fs::File;
use std::io::{self, Read, Write};

//? 전제 조건
// main() 함수나 해당 위치 함수의 반환 타입이 Result<...> 이어야 한다.
// 그래야 에러를 return할 수 있다.
fn main() -> io::Result<()> {
    //?를 붙이면 에러가 발생하면 즉시 현재 함수를 빠져나가고,
    //에러를 호출자에게 전달
    let mut file = File::create("example.txt")?; // 파일 생성

    // b"Hello"처럼 b를 붙이면 &[u8] 타입, 즉 바이트 슬라이스가 된다.
    // write_all 메서드는 &[u8] 타입의 데이터를 받아들이기 때문
    file.write_all(b"Hello, Rust!")?; // 파일에 내용 추가

    // 파일 읽기
    let mut file = File::open("example.txt")?;
    let mut content = String::new();
    file.read_to_string(&mut content)?;
    println!("{}", content);

    Ok(())
}

/*실행결과
Hello, Rust!
*/

2. 디렉터리 생성, 읽기, 삭제

use std::fs;
use std::io;

fn main() -> io::Result<()> {
    // 디렉터리 생성
    fs::create_dir("example_directory")?;
    println!("example_directory 생성됨");

    // 현재 실행 디렉터리의 모든 내용 출력
    let entries = fs::read_dir(".")?;
    println!("현재 실행 디렉터리 내용:");
    for entry in entries {
        let entry = entry?;
        println!("{:?}", entry.path());
    }

    // 디렉터리 삭제
    //fs::remove_dir("example_directory")?;
    //println!("example_directory 삭제됨");

    Ok(())
}
/*실행 결과
example_directory 생성됨
현재 실행 디렉터리 내용:
".\\example_directory"
".\\main.exe"
".\\main.pdb"
".\\main.rs"
*/

3. Path, PathBuf

use std::path::{Path, PathBuf};

fn main() {
    // Path : 참조용, 읽기만 가능
    let path = Path::new("/tmp/test.txt");

    // 경로의 파일명 추출
    if let Some(filename) = path.file_name() {
        println!("파일명: {:?}", filename);
    }

    // 경로의 확장자 추출
    if let Some(extension) = path.extension() {
        println!("확장자: {:?}", extension);
    }

    // PathBuf : 소유 및 수정 가능
    let mut path_buf = PathBuf::from("/tmp/foo");
   
    // 경로에 파일명 추가
    path_buf.push("example.txt");
    println!("전체 경로: {:?}", path_buf);  
}

/*실행 결과
파일명: "test.txt"
확장자: "txt"
전체 경로: "/tmp/foo\\example.txt"
*/

댓글 없음:

댓글 쓰기