2024/01/20
はじめに
Rustの std::fs
を使って、すでに存在しているファイルを、既存の内容を無視して上書きしようと思い、
「すでに存在しているのでFile::open()
かな?」なんて思って試したところ、そうじゃなかったのでメモを残す。
前提
- すでに存在しているファイル(
dummy.txt
)を、既存内容を無視して上書きする - サンプルコードでは、エラー処理は省略し、
.expect()
を用いる
できるコード(File::create()
)
直感とは反するが、既存内容を無視する場合、このようにするとできた。
use std::io::Write;
fn main() {
let mut file = std::fs::File::create("dummy.txt").expect("Failed to create file");
file.write_all(b"Hello, world!")
.expect("Failed to write to file");
}
できないコード(File::open()
)
直感的に試してしまった File::open()
の例。
use std::io::Write;
fn main() {
let mut file = std::fs::File::open("dummy.txt").expect("Failed to create file");
file.write_all(b"Hello, world!")
.expect("Failed to write to file");
}
thread 'main' panicked at src/main.rs:6:10:
Failed to write to file: Os { code: 9, kind: Uncategorized, message: "Bad file descriptor" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
おわりに
エラー処理は、利用時の要求に応じて適宜追加してくださるよう、お願いします。