Я хочу написать программу, которая будет писать файл за 2 шага. Вероятно, файл может не существовать до запуска программы. Имя файла исправлено.
Проблема в том, что OpenOptions.new().write()
может выйти из строя. В этом случае я хочу вызвать пользовательскую функцию trycreate()
. Идея состоит в том, чтобы создать файл, а не открывать его и возвращать дескриптор. Поскольку имя файла исправлено, trycreate()
не имеет аргументов, и я не могу установить время жизни возвращаемого значения.
Как я могу решить эту проблему?
use std::io::Write;
use std::fs::OpenOptions;
use std::path::Path;
fn trycreate() -> &OpenOptions {
let f = OpenOptions::new().write(true).open("foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => panic!("ERR"),
};
f
}
fn main() {
{
let f = OpenOptions::new().write(true).open(b"foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => trycreate("foo.txt"),
};
let buf = b"test1\n";
let _ret = f.write(buf).unwrap();
}
println!("50%");
{
let f = OpenOptions::new().append(true).open("foo.txt");
let mut f = match f {
Ok(file) => file,
Err(_) => panic!("append"),
};
let buf = b"test2\n";
let _ret = f.write(buf).unwrap();
}
println!("Ok");
}