RUST · 심층 가이드
Rust 파일/IO 완전 정리
텍스트 읽기·쓰기와 JSON 저장, CSV 파싱, 환경 변수, 경로 합치기, 표준 입력까지 Rust 파일 입출력 15가지를 실행 예제와 함께 정리했습니다.
파일 입출력은 Rust에서 오류 처리와 소유권이 동시에 드러나는 영역입니다. 거의 모든 함수가 io::Result를 돌려주므로 실패 경로를 건너뛸 수 없고, 경로는 String이 아니라 Path와 PathBuf라는 별도 타입으로 다룹니다. 문자열을 그대로 이어 붙이던 습관이 여기서 한 번 교정됩니다.
텍스트 파일 읽기와 텍스트 파일 쓰기로 시작해 텍스트 파일 추가 쓰기까지 보면 열기 옵션의 차이가 정리됩니다. 그다음 경로 합치기와 디렉터리 목록, 존재 여부 확인을 묶어 읽으면 경로를 안전하게 다루는 감각이 생기고, 환경 변수 읽기와 명령행 인자, 설정 로드는 그대로 작은 CLI 도구의 뼈대가 됩니다.
버퍼링에는 조용한 함정이 있습니다. BufWriter는 스코프를 벗어날 때 자동으로 비워지지만, 그 과정에서 발생한 오류는 보고되지 않고 사라집니다. 디스크가 가득 찼거나 쓰기가 실패해도 프로그램은 성공한 것처럼 끝날 수 있습니다. 쓰기를 마쳤으면 스코프에 맡기지 말고 flush()를 명시적으로 호출해 그 결과를 확인하십시오.
01텍스트 파일 읽기
Rust에서 텍스트 파일 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 텍스트 파일 읽기
use std::fs;
fn main() {
fs::write("sample-1.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
02텍스트 파일 쓰기
Rust에서 텍스트 파일 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 텍스트 파일 쓰기
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-2.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
03텍스트 파일 추가 쓰기
Rust에서 텍스트 파일 추가 쓰기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 텍스트 파일 추가 쓰기
use std::fs;
fn main() {
fs::write("sample-3.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
04JSON 저장
Rust에서 JSON 저장 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// JSON 저장
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-4.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
05CSV 파싱
Rust에서 CSV 파싱 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// CSV 파싱
use std::fs;
fn main() {
fs::write("sample-5.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
06환경 변수 읽기
Rust에서 환경 변수 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 환경 변수 읽기
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-6.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
07명령행 인자
Rust에서 명령행 인자 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 명령행 인자
use std::fs;
fn main() {
fs::write("sample-7.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
08경로 합치기
Rust에서 경로 합치기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 경로 합치기
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-8.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
09디렉터리 목록
Rust에서 디렉터리 목록 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 디렉터리 목록
use std::fs;
fn main() {
fs::write("sample-9.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
10임시 파일
Rust에서 임시 파일 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 임시 파일
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-10.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
11존재 여부 확인
Rust에서 존재 여부 확인 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 존재 여부 확인
use std::fs;
fn main() {
fs::write("sample-11.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
12표준 입력 읽기
Rust에서 표준 입력 읽기 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 표준 입력 읽기
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-12.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
13설정 로드
Rust에서 설정 로드 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 설정 로드
use std::fs;
fn main() {
fs::write("sample-13.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
14직렬화
Rust에서 직렬화 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 직렬화
use std::path::PathBuf;
fn main() {
let path = PathBuf::from("logs").join("2026").join("app-14.log");
println!("{}", path.display());
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
15로그 파일 회전 흉내
Rust에서 로그 파일 회전 흉내 개념을 코드로 빠르게 확인하는 파일/IO 예제입니다.
Rust code
// 로그 파일 회전 흉내
use std::fs;
fn main() {
fs::write("sample-15.txt", "hello").unwrap();
println!("written");
}파일 예제는 경로, 권한, 인코딩 같은 코드 밖의 조건도 같이 점검해야 안전합니다.
로컬에서는 되던 경로와 권한이 배포 환경에서는 다르게 동작할 수 있습니다.
정리하며
- 경로는 문자열이 아니라 Path와 PathBuf 타입으로 다룹니다
- 대부분의 IO 함수가 Result를 돌려주므로 실패 경로를 반드시 처리합니다
- BufWriter는 자동 flush의 오류를 삼키므로 직접 flush하고 결과를 확인합니다
- 환경 변수와 명령행 인자를 합치면 작은 CLI 도구의 뼈대가 완성됩니다
더 깊이 들어가고 싶다면 Rust 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.