首页 > 其他分享 >Rust文件操作

Rust文件操作

时间:2024-09-28 14:15:32浏览次数:5  
标签:lang 文件 html let Rust https org 操作 rust

文件管理

mkdir

https://doc.rust-lang.org/std/fs/fn.create_dir.html

mkdir -p

https://doc.rust-lang.org/std/fs/fn.create_dir_all.html

mv

https://doc.rust-lang.org/std/fs/fn.rename.html

临时文件/目录

https://crates.io/crates/tempfile

临时目录:https://docs.rs/tempfile/latest/tempfile/fn.tempdir.html

获取文件长度

let file = File::open(path)?;
let len = file.metadata()?.len();

参考:

https://doc.rust-lang.org/stable/std/fs/struct.File.html#method.metadata

https://doc.rust-lang.org/stable/std/fs/struct.Metadata.html

Path

官方文档:https://doc.rust-lang.org/std/path/struct.Path.html

常用:

assert_eq!(Path::new("/etc").join("passwd"), PathBuf::from("/etc/passwd"));

错误处理

官方文档:https://doc.rust-lang.org/std/io/struct.Error.html

常用:

// On Linux
let error = io::Error::from_raw_os_error(22);
assert_eq!(error.kind(), io::ErrorKind::InvalidInput);

从文件中读取整型

如果只用标准库里的safe rust的话,只能先读进一个buffer里,然后再转成integer:https://stackoverflow.com/questions/70466567/read-binary-file-in-units-of-f64-in-rust。定义buffer的时候一般得初始化为0,而且后面将buffer转换成integer也需要一次复制(虽然可能会被编译器优化掉)。例子:

let mut reader = io::Cursor::new([1u8, 2u8, 3u8, 4u8]);
let mut buf = [0u8; 4]; 
reader.read_exact(&mut buf).unwrap();
let v = u32::from_le_bytes(buf);
assert_eq!(v, 0x04030201);

相关:

https://github.com/rust-lang/rfcs/blob/master/text/2930-read-buf.md

https://docs.rs/binread/latest/binread/

从文件中逐行读取

let file = File::open("path")?;
let reader = BufReader::new(file);
for line in reader.lines() {
    println!("{}", line?);
}

值得注意的是,io::stdin()也可以这样:

for line in io::stdin().lines() {
    println!("{}", line?);
}

参考:在 Rust 中读取文件的 4 种方法

在文件中从后往前逐行读取

用crate rev_lines: https://github.com/mjc-gh/rev_lines

或者crate rev_buf_reader: https://github.com/andre-vm/rev_buf_reader

相关讨论:https://users.rust-lang.org/t/idiomatic-way-of-reading-a-text-file-line-by-line-in-reverse/8547

但是这两个crate好像都没有prefetch,导致每次读取都要卡一下。

其他

{% post_link Rust/IO/'rust格式化打印到文件' %}

标签:lang,文件,html,let,Rust,https,org,操作,rust
From: https://www.cnblogs.com/searchstar/p/18437908

相关文章

  • rust运行shell命令并获取输出
    usestd::io::{BufReader,BufRead};usestd::process::{self,Command,Stdio};fnmain(){ls();ps();xargs();time();iostat();}//不带参数命令fnls(){letoutput=Command::new("ls").output().expect("执行异常,提示");......
  • rust打印变量类型
    可以试试std::any::type_name。注意,这个是unstable的。usestd::collections::HashSet;fnprint_type_of<T>(_:&T){println!("{}",std::any::type_name::<T>())}fnmain(){letmuts=HashSet::new();letve=vec![1,2,1,3,2,......
  • rust交换数组中的两个元素
    不可以直接用std::mem::swap,因为这个函数需要拿两个可变引用,但是不可以同时拿两个这个数组的可变引用。所以要么手写:lettmp=a[i];a[i]=a[j];a[j]=tmp;要么用Vec::swap:a.swap(i,j);其内部实现:fnswap(&mutself,a:usize,b:usize){unsafe{//......
  • rust二分搜索
    如果要二分搜索某个特定值,可以用binary_search:https://doc.rust-lang.org/stable/std/primitive.slice.html#method.binary_search如果要实现C++里的lower_bound和upper_bound类似的功能,可以用partition_point:https://doc.rust-lang.org/stable/std/primitive.slice.html#meth......
  • Rust索引String
    Rust的String里其实是UTF-8编码的,而UTF-8是变长编码,因此会导致Rust索引String时,可能是索引第k个UTF-8字符(需要遍历字符串),也可能是索引第k个字节。因此,Rust不支持直接用下标来索引String。如果要找到第k个UTF-8字符:s.chars().nth(k)如果要找到第k个字节:letx:u8=s.as_bytes......
  • RocksDB代码分析——Compaction的输入文件的选择
    这里主要分析LevelCompactionBuilder::PickCompaction是如何选择输入文件的。SetupInitialFiles();找一个需要compact到下层的SSTfile。只会在score>=1的level里找。score的计算见VersionStorageInfo::ComputeCompactionScore({%post_linkStorage/'RocksDB代码分析——Compa......
  • mysql 0928 DDL表操作
    `ALTERTABLEempaddnicknameVARCHAR(20)COMMENT'昵称';--添加字段nicknameDESCTABLEemp;--查看表ALTERTABLEempMODIFYnicknamevarchar(10);--修改数据类型ALTERTABLEempchangenicknameusernameVARCHAR(30);--修改字段nickname为usernameALT......
  • pandas数据框常用操作
    pandas官方文档:https://pandas.pydata.org/docs/reference/DataFrame官方文档:https://pandas.pydata.org/docs/reference/frame.html添加新列:https://www.geeksforgeeks.org/adding-new-column-to-existing-dataframe-in-pandas/创建构造函数:https://pandas.pydata.org/d......
  • numpy矩阵操作
    numpy官方文档:https://numpy.org/doc/stable/pipinstallnumpyimportnumpyasnp矩阵定义$$\left[\begin{matrix}1&2\3&4\end{matrix}\right]$$a=np.array([[1,2],[3,4]])reshapehttps://numpy.org/doc/stable/reference/generated/numpy.res......
  • sha256sum文件哈希值和直接哈希字符串的哈希值不一样
    例如在文件test.txt里写入test没有换行。然后sha256sumtest.txt出来的结果是f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2test.txt但是在这个网站上http://encode.chahuo.com/输入test,然后以sha256方式哈希得到的结果是9f86d081884c7d659a2......