https://www.tutorialspoint.com/rust/rust_file_input_output.htm
콘솔에서 읽고 쓰는 것 외에도 Rust는 파일을 읽고 쓸 수 있음
File 구조체는 파일에 대해 읽기-쓰기 기능 제공
File 구조체의 모든 메서드는 io::Result 열거형의 변형을 반환
Sr.No. | Module | Method | Signature | Description |
---|---|---|---|---|
1 | std::fs::File | open() | pub fn open<P:AsRef>(path:P)->Result | open static 메소드는 읽기 전용 모드로 파일을 여는 데 사용 |
2 | std::fs::File | create() | pub fn create<P:AsRef>(path:P)->Result | create 정적 메서드는 쓰기 전용 모드에서 파일을 여는데 사용, 이미 파일이 존재하면 이전 내용은 삭제, 파일이 없으면 생성 |
3 | std::fs::remove_file | remove_file() | pub fn remove_file<P:AsRef>(path:P)->Result<()> | 파일 시스템에서 파일 제거, 파일이 즉시 삭제된다는 보장은 없음 |
4 | std::fs::OpenOptions | append() | pub fn append(&mut self, append: bool)->&mut OpenOptions | 파일의 추가 모드에 대한 옵션을 설정 |
5 | std::io::Write | write_all() | fn write_all(&mut self, buf: &[u8])->Result<()> | 전체 버퍼를 쓰기 시도 |
6 | std::io::Read | read_to_string() | fn read_to_string(&mut self, buf:&mut String)->Result | 소스의 EOF까지의 내용을 버퍼에 추가 |
use std::io::Write;
fn main() {
let mut file = std::fs::File::create("data.txt").expect("create failed");
file.write_all("Hello World".as_bytes()).expect("write failed");
file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
println!("data written to file" );
}
open() 함수는 파일이 존재하지 않거나 어떤 이유로든 파일에 액세스할 수 없는 경우 Err 발생
open() 함수가 성공하면 파일 핸들을 반환
use std::io::Read;
fn main(){
let mut file = std::fs::File::open("data.txt").unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
print!("{}", contents);
}
use std::fs;
fn main() {
fs::remove_file("data.txt").expect("could not remove file");
println!("file is removed");
}
use std::fs::OpenOptions;
use std::io::Write;
fn main() {
let mut file = OpenOptions::new().append(true).open("data.txt").expect(
"cannot open file");
file.write_all("Hello World".as_bytes()).expect("write failed");
file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
println!("file append success");
}
use std::io::Read;
use std::io::Write;
fn main() {
let mut command_line: std::env::Args = std::env::args();
command_line.next().unwrap();
// skip the executable file name
// accept the source file
let source = command_line.next().unwrap();
// accept the destination file
let destination = command_line.next().unwrap();
let mut file_in = std::fs::File::open(source).unwrap();
let mut file_out = std::fs::File::create(destination).unwrap();
let mut buffer = [0u8; 4096];
loop {
let nbytes = file_in.read(&mut buffer).unwrap();
file_out.write(&buffer[..nbytes]).unwrap();
if nbytes < buffer.len() { break; }
}
}