Rust - 终端输入、文件读写

文章目录


查看参数

rust 复制代码
fn main() {   
    let args = std::env::args();
    println!("{:?}", args); // Args { inner: ["target/debug/rt"] }

    for arg in args {
        println!("{}", arg);
    }
}

接收终端输入

rust 复制代码
use std::io::stdin;

fn main() { 
    let mut str_buf = String::new();
  
    stdin().read_line(&mut str_buf)
        .expect("Failed to read line.");

    println!("Your input line is \n{}", str_buf);
}

读取文件

rust 复制代码
use std::io::prelude::*;  
use std::fs;

fn main() {
    let text = fs::read_to_string("D:\\text.txt").unwrap();
    println!("{}", text);
  
  	// 读 二进制文件  u8 类型集合
    let content = fs::read("D:\\text.txt").unwrap();
    println!("{:?}", content);
  
  	// 流式读取 
  	// 读取文件的下面一些字节到缓冲区(缓冲区是一个 u8 数组),读取的字节数等于缓冲区的长度。
    let mut buffer = [0u8; 5];
    let mut file = fs::File::open("D:\\text.txt").unwrap();
    file.read(&mut buffer).unwrap();
    println!("{:?}", buffer);
  	
    file.read(&mut buffer).unwrap();
    println!("{:?}", buffer);
  
  
}

std::fs::File 的 open 方法是"只读"打开文件,并且没有配套的 close 方法,因为 Rust 编译器可以在文件不再被使用时自动关闭文件。


写入文件

rust 复制代码
use std::io::prelude::*;  
use std::fs;

fn main() {
	  // 一次写入
    fs::write("D:\\text.txt", "FROM RUST PROGRAM")
        .unwrap();
  
  	// 流式写入
    let mut file = File::create("D:\\text.txt").unwrap();
    file.write(b"FROM RUST PROGRAM").unwrap();
}

  • File 类中不存在 append 静态方法,但可以使用 OpenOptions 来实现 用特定方法打开文件

  • OpenOptions 是一个灵活的打开文件的方法,它可以设置打开权限,除append 权限以外还有 read 权限和 write 权限

rust 复制代码
use std::io::prelude::*;
use std::fs::OpenOptions;

fn main() -> std::io::Result<()> {
    
    let mut file = OpenOptions::new()
            .append(true).open("D:\\text.txt")?; 
    file.write(b" APPEND WORD")?;

    let mut file = OpenOptions::new()
            .read(true).write(true).open("D:\\text.txt")?; 
    file.write(b"COVER")?;
  
    Ok(())
}

伊织 2024-05-10(五)

相关推荐
王燕龙(大卫)1 分钟前
rust:线程
开发语言·rust
期待のcode12 分钟前
MyBatis-Plus的Wrapper核心体系
java·数据库·spring boot·后端·mybatis
老华带你飞26 分钟前
出行旅游安排|基于springboot出行旅游安排系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring·旅游
舒一笑35 分钟前
在低配云服务器上实现自动化部署:Drone CI + Gitee Webhook 的轻量级实践
前端·后端·程序员
李广坤37 分钟前
Rust基本使用
后端·rust
我是你们的明哥41 分钟前
Java优先级队列(PriorityQueue)详解:原理、用法与实战示例
后端·算法
m0_740043731 小时前
SpringBoot快速入门01- Spring 的 IOC/DI、AOP,
spring boot·后端·spring
IT_陈寒1 小时前
Java 21新特性实战:这5个改进让我的代码效率提升40%
前端·人工智能·后端
程序员爱钓鱼1 小时前
Mac必备技巧:使用 tree命令快速查看目录结构
后端·go·trae
老华带你飞1 小时前
垃圾分类|基于springboot 垃圾分类系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring