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"
*/
댓글 없음:
댓글 쓰기