文件读写
打开文件
rust
let file = std::fs::File::open("data.txt").unwrap();
println!("open file done: {:?}", file);
bash
open file done: File { fd: 3, path: "/Users/thomas/Desktop/firstrust/data.txt", read: true, write: false }
bash
# 文件不存在
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
bash
# chmod -r data.txt
called `Result::unwrap()` on an `Err` value: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
创建文件
rust
let file = std::fs::File::create("data.txt").unwrap();
println!("create file done: {:?}", file);
bash
create file done: File { fd: 3, path: "/Users/thomas/Desktop/firstrust/data.txt", read: false, write: true }
bash
# chmod -w data.txt
called `Result::unwrap()` on an `Err` value: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
bash
# "data.txt" --> "void/data.txt"
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
写文件
rust
use std::io::Write;
fn main() {
let mut file = std::fs::File::create("data.txt").expect("create failed");
file.write_all("hello".as_bytes()).expect("write failed");
file.write_all("\nworld".as_bytes()).expect("write failed");
println!("Wrote to file!")
}
读文件
rust
use std::io::Read;
fn main() {
let mut file = std::fs::File::open("data.txt").expect("open failed");
let mut contents = String::new();
file.read_to_string(&mut contents).expect("read failed");
println!("{}", contents);
}
bash
hello
world
bash
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
bash
# 生成一个512字节的二进制文件
# dd if=/dev/urandom of=data.txt bs=512 count=1
read failed: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }
bash
open failed: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
追加内容到文件末尾
rust
use std::fs::OpenOptions;
use std::io::Write;
fn main() {
let mut file = OpenOptions::new().append(true).open("data.txt").expect("open failed");
file.write_all(b"Hello, world!").unwrap();
file.write_all("\nhello again!".as_bytes()).unwrap();
println!("append to file.")
}
删除文件
rust
fn main() {
std::fs::remove_file("data.txt").unwrap();
println!("File deleted!")
}
复制文件
rust
use std::fs;
use std::io;
fn main() -> io::Result<()> {
let source = "source_file.txt"; // 源文件路径
let destination = "destination_file.txt"; // 目标文件路径
// 使用 fs::copy 函数复制文件
fs::copy(source, destination)?;
println!("文件已成功复制!");
Ok(())
}
bash
文件已成功复制!
bash
Error: Os { code: 2, kind: NotFound, message: "No such file or directory" }
rust
use std::fs;
fn main() {
let source = "source_file.txt";
let destination = "destination_file.txt";
match fs::copy(source, destination) {
Ok(_) => println!("文件已成功复制!"),
Err(e) => eprintln!("文件复制失败: {}", e),
}
}
查找文件
rust
use std::fs;
fn main() -> std::io::Result<()> {
// 指定要查找的目录
let dir = "/etc/nginx/conf.d/";
// 读取目录中的所有条目
let entries = fs::read_dir(dir)?;
// 遍历所有条目,过滤出 .conf 文件
for entry in entries {
let entry = entry?;
let path = entry.path();
if path.is_file() && path.extension().map_or(false, |ext| ext == "conf") {
println!("{:?}", path);
}
}
Ok(())
}