如何获取Rust中已经打开的文件的大小?

时间:2019-01-22 07:42:42

标签: file rust

如何获取声明为File变量的文件的大小/长度?

可以通过fs::metadata使用文件名来获取它:

let x = fs::metadata(file_path)?.len();

但是我有一个已经创建和编辑的文件:

let mut my_file = File::create(file_path).unwrap();
my_file.write_all(buffer) // buffer is a data which comes from network and put into Vec<u8>

// From here, does it possible to get my_file length?
// Looking something like my_file.len();

有没有给出File长度的函数?

2 个答案:

答案 0 :(得分:4)

my_file提供了一种metadata方法。它可以像这样与您的my_file.metadata().unwrap().len() 一起使用:

phrase="Hey John, take that"

答案 1 :(得分:3)

有一些选择。

  1. 如果像创建(File::create一样创建文件,则会截断该文件,这意味着它将把该文件的大小设置为0并写入{ {1}}到文件。这意味着您的文件现在的长度为buffer

  2. 使用File::metadata获取元数据,从而获取文件的长度。请记住,您必须将文件(通过使用File::sync_all)与基础文件系统同步,以更新元数据并获取正确的值。

  3. 使用buffer.len()实现的Seek::seek。然后,您可以使用File来获取当前偏移量,它将告诉您最后可用的位置。

  4. 每晚(预期在1.35.0版中使用),您可以使用Seek::stream_len,与my_file.seek(SeekFrom::End(0))不同,reference可以恢复以前的搜索位置。