忽略我unwrap用来忽略文件不存在时会发生什么的事实,在我看来,这段简短的代码应该可以工作(只要文件确实存在):
use std::fs::File;
use std::io::Write;
fn main() {
let mut f = File::open("test.txt").unwrap();
let result = f.write_all(b"some data");
match result {
Ok(_) => println!("Data written successfully"),
Err(e) => panic!("Failed to write data: {}", {e}),
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我得到了这个:
thread 'main' panicked at 'Failed to write data: Bad file descriptor (os error 9)', src/main.rs:10:19
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我知道如果我按照在线的众多示例之一进行操作,我可以写入文件。问题不是“我如何写入文件?”。这就是为什么这不起作用。
它不起作用,因为File::open()以只读模式打开文件。相反,您必须使用File::create()which 在只写模式下打开文件。或者,您也可以使用OpenOptions, 进一步指定是否要改为append()文件。
use std::fs::File;
use std::io::Write;
fn main() {
let mut f = File::create("test.txt").unwrap();
let result = f.write_all(b"some data");
match result {
Ok(_) => println!("Data written successfully"),
Err(err) => panic!("Failed to write data: {}", err),
}
}
Run Code Online (Sandbox Code Playgroud)
使用与以下方式File::create()使用相同OpenOptions:
use std::fs::OpenOptions;
use std::io::Write;
fn main() {
let mut f = OpenOptions::new()
.write(true)
.create(true)
.truncate(true)
.open("test.txt")
.unwrap();
let result = f.write_all(b"some data");
match result {
Ok(_) => println!("Data written successfully"),
Err(err) => panic!("Failed to write data: {}", err),
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |