stdクレートのfsモジュールに必要な機能がまとめられている
use std::fs::File;
fileが得られたら、BufReader構造体のインスタンスを作成する
use std::io::{BufRead, BufReader}
data.txt
Hello! This is sample text file It takes text and display it. file end.
data.txtを読み込み表示する
use std::fs::File; use std::io::{BufRead, BufReader}; fn main(){ let file = File::open("data.txt").unwrap(); let reader = BufReader::new(file); let mut count = 0; for line in reader.lines() { count += 1; let txt = line.unwrap(); println!("{}: {}", count, txt); } }
### File取得とエラー処理
use std::fs::File; use std::io::{BufRead, BufReader}; use std::io::ErrorKind; fn main(){ let file = match File::open("data.txt") { Ok(file) => file, Err(error) => match error.kind(){ ErrorKind::NotFound => panic!("ファイルが見つかりませんでした"), ErrorKind::PermissionDenied => panic!("ファイルへのアクセス権限がありません"), _ => panic!("ファイルのオープンに失敗しました:{:?}", error), }, }; let reader = BufReader::new(file); for line in reader.lines() { println!("{}", line.unwrap()); } }
### ファイルにテキストを保存する
use std::fs::File; use std::io::Write; fn main(){ let data = [ "Hello world!", "これはサンプルデータです。", "テストテスト!" ]; let str_data = data.join("\n"); let mut file = File::create("backup.txt").unwrap(); file.write_all(str_data.as_bytes()).unwrap(); }
### ファイルにデータを追記する
use std::fs::OpenOptions; use std::io::Write; fn main() { let str_data = "This is sample!\n"; let mut file = OpenOptions::new() .create(true) .append(true) .open("append.txt").unwrap(); file.write_all(str_data.as_bytes()).unwrap(); }
### ファイル一覧の取得
use std::fs; fn main() { let paths = fs::read_dir("./").unwrap(); for path in paths { let entry = path.unwrap(); println!("{:?}", entry.path().to_str()); } }
### エントリーの種類を調べる
use std::fs; fn main() { let paths = fs::read_dir("./").unwrap(); for path in paths { let entry = path.unwrap(); let ftype = entry.file_type().unwrap(); if ftype.is_file() { println!("{:?} file", entry.path()) } else if ftype.is_dir(){ println!("{:?} dir", entry.path()) } else if ftype.is_symlink() { println!("{:?} link", entry.path()) } else { println!("{:?}", entry.path()) } } }
### ファイル/フォルダの操作
fs::create_dir(), fs::copy(), fs::move(), fs::remove_file(), fs::remove_dir(), fs::remove_dir_all()
use std::fs; fn main() { _ = fs::create_dir("./backup"); let entries = fs::read_dir("./").unwrap(); for path in entries { let entry = path.unwrap(); if entry.file_type().unwrap().is_file(){ let file_name = entry.file_name(); let from_name = format!("./{}", file_name.to_string_lossy()); let to_name = format!("./backup/_{}", file_name.to_string_lossy()); _ = fs::copy(&from_name, &to_name); println!("backup: {:?} -> {}", from_name, to_name); } else { println!("not copied.({:?})", entry.file_name()); } } }