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

问题描述 投票:2回答:2

如何获得声明为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长度的函数?

file rust
2个回答
4
投票

有几个选择。

  1. 如果您创建文件(File::create),则会截断文件,这意味着它会将该文件的大小设置为0并将buffer的内容写入文件。这意味着您的文件现在将具有buffer.len()的长度。
  2. 使用File::metadata获取元数据,从而获得文件的长度。请记住,您必须将文件(通过使用File::sync_all)与基础文件系统同步,以更新元数据并获取正确的值。
  3. 使用Seek::seek实施的File。然后,您可以使用my_file.seek(SeekFrom::End(0))获取当前偏移量,该值将告诉您可用的最后位置。
  4. 在每晚(预计发布1.35.0),您可以使用Seek::stream_len,与seek(SeekFrom::End(0))不同,它恢复之前的搜索位置。

5
投票

std::fs::File提供metadata方法。它可以与你的my_file一起使用,如下所示:

my_file.metadata().unwrap().len()
© www.soinside.com 2019 - 2024. All rights reserved.