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

30

如何获取被声明为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个回答

39

std::fs::File 提供了一个 metadata 方法。你可以像这样使用它来处理你的 my_file

my_file.metadata().unwrap().len();

17

有几个选项:

  1. 如果您像这样创建文件(File::create),则会截断文件,这意味着它将文件的大小设置为 0 并将buffer的内容写入文件中。这意味着您的文件现在将具有长度 buffer.len()

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

  3. 使用File实现的Seek::seek方法。然后,您可以使用my_file.seek(SeekFrom::End(0))获取当前偏移量,该方法将告诉您最后一个位置可用。

  4. 在nightly版本中(预计发布1.35.0),您可以使用Seek::stream_len,与seek(SeekFrom::End(0))不同的是,它会还原先前的寻址位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接