use std::fs;
use std::fs::File;
use std::fs::OpenOptions;
use std::io::prelude::*;
use std::io::stdin;
fn main() {
//Rust 中主函数是个无参函数,环境参数需要开发者通过 std::env 模块取出
let args = std::env::args();
println!("{:?}", args);
for arg in args {
println!("{}", arg);
}
//std::io 模块提供了标准输入(可认为是命令行输入)
let mut str_buf = String::new();
stdin()
.read_line(&mut str_buf)
.expect("Failed to read line.");
println!("Your input line is {}", str_buf);
//文本文件的读取
let text = fs::read_to_string("text.txt").unwrap();
println!("{}", text);
//读取的文件是二进制文件
let content = fs::read("text.txt").unwrap();
println!("{:?}", content);
//以上两种方式是一次性读取,十分适合 Web 应用的开发。但是对于一些底层程序来说,传统的按流读取的方式依然是无法被取代的,
//因为更多情况下文件的大小可能远超内存容量。
//std::fs::File 的 open 方法是"只读"打开文件,并且没有配套的 close 方法,因为 Rust 编译器可以在文件不再被使用时自动关闭文件。
let mut buffer = [0u8; 5];
let mut file = fs::File::open("text.txt").unwrap();
file.read(&mut buffer).unwrap();
println!("{:?}", buffer);
file.read(&mut buffer).unwrap();
println!("{:?}", buffer);
//文件写入
//一次性写入,它会直接删除文件内容(无论文件多么大)。如果文件不存在就会创建文件。
fs::write("text.txt", "FROM RUST PROGRAM").unwrap();
//用流的方式写入文件内容,可以使用 std::fs::File 的 create 方法:
let mut file = File::create("text.txt").unwrap(); //打开的文件一定存放在可变的变量中才能使用 File 的方法!
file.write(b"FROM RUST PROGRAM").unwrap();
//File 类中不存在 append 静态方法,但是我们可以使用 OpenOptions 来实现用特定方法打开文件:
let mut file = OpenOptions::new().append(true).open("text.txt").unwrap();
file.write(b" APPEND WORD").unwrap();
//OpenOptions 是一个灵活的打开文件的方法,它可以设置打开权限,除append 权限以外还有 read 权限和 write 权限,如果我们想以读写权限打开一个文件可以这样写:
let mut file = OpenOptions::new()
.read(true)
.write(true)
.open("text.txt")
.unwrap();
file.write(b"COVER555555555").unwrap();
}