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());
}
}
}