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

Web*_*rix 3 file rust

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

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

let x = fs::metadata(file_path)?.len();
Run Code Online (Sandbox Code Playgroud)

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

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();
Run Code Online (Sandbox Code Playgroud)

有没有给出长度的函数File

hel*_*low 7

有几个选项。

  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)),恢复先前的搜索位置。


0xA*_*xAX 5

std::fs::File提供了一个metadata方法。它可以my_file像这样与您一起使用:

my_file.metadata().unwrap().len();
Run Code Online (Sandbox Code Playgroud)

  • @Stargateur是的,但仅适用于给定的文件路径,而不适用于`File`本身。 (5认同)