■ StringIO 클래스를 사용해 문자열을 파일 형태로 처리하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import io text = "c# vb java javascript python rust" stringIO = io.StringIO(text) print(stringIO.read()) stringIO.close() |
■ PathBuf 구조체의 file_name 메소드를 사용해 디렉토리명 또는 파일명을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::ffi; use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/TestProject"); let file_name : &ffi::OsStr = path_buffer.file_name().unwrap(); println!("{}", file_name.to_str().unwrap()); |
■ PathBuf 구조체의 is_dir 메소드를 사용해 디렉토리 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); println!("{}", path_buffer.is_dir()); |
■ DirEntry 구조체의 path 메소드를 사용해 디렉토리 엔트리의 경로 버퍼를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
use std::fs; use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); let read_directory : fs::ReadDir = path_buffer.read_dir().expect("올바르지 않은 경로입니다"); for directory_entry_result in read_directory { let directory_entry : fs::DirEntry = directory_entry_result.unwrap(); let path_buffer : path::PathBuf = directory_entry.path(); let file_path = path_buffer.to_str().unwrap_or("올바르지 않은 파일 이름입니다"); println!("{}", file_path); } |
■ File 구조체의 create 연관 함수를 사용해 파일을 생성하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::fs; let file_path : &str = "d:/target.txt"; { let file : fs::File = fs::File::create(file_path).unwrap(); } |
■ BufWriter<T> 구조체의 new 메소드를 사용해 BufWriter 객체를 생성하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::fs; use std::io; let file_path : &str = "d:/target.txt"; { let file : fs::File = fs::File::create(file_path).unwrap(); let mut writer : io::BufWriter<fs::File> = io::BufWriter::new(file); } |
■ BufReader<T> 구조체의 new 메소드를 사용해 BufReader 객체를 생성하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::fs; use std::io; let file_path : &str = "d:/source.txt"; { let file : fs::File = fs::File::open(file_path).unwrap(); let reader : io::BufReader<fs::File> = io::BufReader::new(file); } |
■ PathBuf 구조체의 read_dir 메소드를 사용해 부모 디렉토리에서 자식 디렉토리명과 파일명을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
use std::fs; use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); let read_directory : fs::ReadDir = path_buffer.read_dir().expect("올바르지 않은 경로입니다"); for directory_entry_result in read_directory { let directory_entry : fs::DirEntry = directory_entry_result.unwrap(); let path_buffer : path::PathBuf = directory_entry.path(); let file_path = path_buffer.to_str().unwrap_or("올바르지 않은 파일 이름입니다"); println!("{}", file_path); } |
■ 디렉토리 트리 구조를 출력하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
use std::borrow; use std::env; use std::path; fn main() { let argument_vector : Vec<String> = env::args().collect(); let mut source_directory_path : &str = "."; if argument_vector.len() >= 2 { source_directory_path = &argument_vector[1]; } let source_path_buffer : path::PathBuf = path::PathBuf::from(source_directory_path); println!("{}", source_directory_path); tree(&source_path_buffer, 0); } fn tree(parent_path_buffer : &path::PathBuf, level : isize) { let child_read_directory = parent_path_buffer.read_dir().expect("존재하지 않는 경로입니다"); for child_directory_entry_result in child_read_directory { let child_path_buffer = child_directory_entry_result.unwrap().path(); for _ in 1..=level { print!("| "); } let file_name : borrow::Cow<str> = child_path_buffer.file_name().unwrap().to_string_lossy(); if child_path_buffer.is_dir() { println!("|-- <{}>", file_name); tree(&child_path_buffer, level + 1); continue; } println!("|-- {}", file_name); } } |
■ PathBuf 구조체의 to_str 메소드를 사용해 경로명을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); println!("{}", path_buffer.to_str().unwrap()); |
■ read_dir 함수를 사용해 부모 디렉토리 경로에서 자식 디렉토리명과 파일명을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
use std::fs; use std::path; fn main() { let read_directory : fs::ReadDir = fs::read_dir("d:/").expect("올바르지 않은 경로입니다"); for directory_entry_result in read_directory { let directory_entry : fs::DirEntry = directory_entry_result.unwrap(); let path_buffer : path::PathBuf = directory_entry.path(); let file_path = path_buffer.to_str().unwrap_or("올바르지 않은 파일 이름입니다"); println!("{}", file_path); } } |
■ PathBuf 구조체의 from 연관 함수를 사용해 디렉토리 경로 문자열에서 PathBuf 객체를 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::path; let path_buffer : path::PathBuf = path::PathBuf::from("d:/"); println!("{}", path_buffer.to_str().unwrap()); |
■ PathBuf 구조체를 사용해 파일을 재귀 검색하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
use std::borrow; use std::env; use std::fs; use std::path; fn main() { let argument_vector : Vec<String> = env::args().collect(); if argument_vector.len() < 3 { println!("findfile (path) (keyword)"); return; } let source_directory_path : &String = &argument_vector[1]; let keyword : &String = &argument_vector[2]; let source_path_buffer : path::PathBuf = path::PathBuf::from(source_directory_path); find_file(&source_path_buffer, keyword); } fn find_file(parent_path_buffer : &path::PathBuf, keyword : &str) { let child_read_directory : fs::ReadDir = parent_path_buffer.read_dir().expect("부모 경로 버퍼의 디렉토리가 존재하지 않습니다."); for child_directory_entry_result in child_read_directory { let child_path_buffer = child_directory_entry_result.unwrap().path(); if child_path_buffer.is_dir() { find_file(&child_path_buffer, keyword); continue; } let child_file_cow : borrow::Cow<str> = child_path_buffer.file_name().unwrap().to_string_lossy(); if None == child_file_cow.find(keyword) { continue; } println!("{}", child_path_buffer.to_string_lossy()); } } |
■ File 구조체의 open 연관 함수를 사용해 파일을 여는 방법을 보여준다. ▶ 예제 코드 (RS)
|
use std::fs; let file_path : &str = "source.txt"; { let file : fs::File = fs::File::open(file_path).unwrap(); } |
■ File 구조체의 write_all 메소드를 사용해 파일에 문자열을 쓰는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
use std::fs::File; use std::io::Write; fn main() { let file_path : &str = "d:/result.txt"; let data : String = get_data(100); let mut file : File = File::create(file_path).unwrap(); let byte_array : &[u8] = data.as_bytes(); file.write_all(byte_array).unwrap(); } fn get_data(max : u32) -> String { let mut target : String = String::new(); for i in 1..=max { if (i % 3 == 0) && (i % 5 == 0) { target += "FizzBuzz\n"; } else if i % 3 == 0 { target += "Fizz\n"; } else if i % 5 == 0 { target += "Buzz\n"; } else { target += &format!("{}\n", i); } } return target; } |
■ BufWriter<T> 구조체의 write 메소드를 사용해 파일에 문자열을 쓰는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
use std::fs::{self, File}; use std::io::{Write, BufWriter}; fn main() { let file_path : &str = "d:/target.txt"; { let file : File = File::create(file_path).unwrap(); let mut writer : BufWriter<File> = BufWriter::new(file); for i in 1..=100 { let mut line : String = format!("{}\n", i); if (i % 3 == 0) && (i % 5 == 0) { line = String::from("FizzBuzz\n"); } else if i % 3 == 0 { line = String::from("Fizz\n"); } else if i % 5 == 0 { line = String::from("Buzz\n"); } let byte_array: &[u8] = line.as_bytes(); writer.write(byte_array).unwrap(); } } let file_content : String = fs::read_to_string(file_path).unwrap(); println!("{}", file_content); } |
■ BufReader<T> 구조체의 lines 메소드를 사용해 순차적으로 파일의 행을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
use std::fs; use std::io; use std::io::BufRead; fn main() { let file_path : &str = "c:/dictionary.txt"; let argument_vector : Vec<String> = std::env::args().collect(); if argument_vector.len() < 2 { println!("[USAGE] ./dictionray word"); return; } let search_word : &String = &argument_vector[1]; let file : fs::File = fs::File::open(file_path).unwrap(); let reader : io::BufReader<fs::File> = io::BufReader::new(file); for line in reader.lines() { let line_string = line.unwrap(); if line_string.find(search_word) == None { continue; } println!("{}", line_string); } } |
■ 텍스트 파일 내 숫자를 더하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
use std::{env, fs, str}; fn main() { let args : env::Args = env::args(); let mut total_value : f64 = 0.0; for (index, file_path) in args.enumerate() { if index == 0 { continue; } let text : String = fs::read_to_string(file_path).unwrap(); let line_split : str::Split<char> = text.split('\n'); for line in line_split { let value : f64 = match line.parse() { Ok(v) => v, Err(_) => 0.0 }; total_value += value; } } println!("{}", total_value); } |
■ read_to_string 함수를 사용해 텍스트 파일을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
use std::env; use std::fs; fn main() { let args : env::Args = env::args(); let argument_vector : Vec<String> = args.collect(); if argument_vector.len() < 2 { println!("읽을 파일 경로를 지정해 주시기 바랍니다."); return; } let file_path : &str = &argument_vector[1]; let text : String = match fs::read_to_string(file_path) { Ok(value) => value, Err(e) => e.to_string() }; println!("{}", text); } |
■ read_to_string 함수를 사용해 텍스트 파일을 읽는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
use std::env; use std::fs; fn main() { let args : env::Args = env::args(); let argument_vector : Vec<String> = args.collect(); if argument_vector.len() < 2 { println!("읽을 파일 경로를 지정해 주시기 바랍니다."); return; } let file_path : &String = &argument_vector[1]; let text : String = fs::read_to_string(file_path).unwrap(); println!("{}", text); } |
■ Stdin 구조체를 사용해 표준 입력에서 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
fn get_standard_input_string() -> String { let mut string_value = String::new(); std::io::stdin().read_line(&mut string_value).expect("입력시 에러가 발생했습니다."); return string_value.trim_end().to_string(); } fn main() { let string_value = get_standard_input_string(); println!("{}", string_value); } |
■ Stdin 구조체를 사용해 표준 입력에서 실수값을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
fn get_standard_input_string() -> String { let mut string_value = String::new(); std::io::stdin().read_line(&mut string_value).expect("입력시 에러가 발생했습니다."); return string_value.trim_end().to_string(); } fn get_standard_input_real_value(default_value : f64) -> f64 { let string_value = get_standard_input_string(); match string_value.trim().parse::<f64>() { Ok(value) => value, Err(_) => default_value } } fn main() { let mut real_value; loop { println!("실수를 입력해 주시기 바랍니다 : "); real_value = get_standard_input_real_value(0.0); if real_value > 0.0 { println!(); break; } println!("실수만 입력 가능합니다.") } println!("입력한 실수는 {} 입니다.", real_value); } |
■ Stdin 구조체의 read_line 메소드를 사용해 표준 입력에서 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let mut string_value : String = String::new(); let stdin : std::io::Stdin = std::io::stdin(); let result : Result<usize, std::io::Error> = stdin.read_line(&mut string_value); |
■ stdin 메소드를 사용해 표준 입력 객체를 만드는 방법을 보여준다. ▶ 예제 코드 (RS)
|
let stdin : std::io::Stdin = std::io::stdin(); |
■ import 키워드를 사용해 입출력 패키지를 임포트하는 방법을 보여준다. ▶ 예제 코드 (DART)