如何获取声明为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
长度的函数?
答案 0 :(得分:4)
my_file
提供了一种metadata
方法。它可以像这样与您的my_file.metadata().unwrap().len()
一起使用:
phrase="Hey John, take that"
答案 1 :(得分:3)
有一些选择。
如果像创建(File::create
一样创建文件,则会截断该文件,这意味着它将把该文件的大小设置为0
并写入{ {1}}到文件。这意味着您的文件现在的长度为buffer
。
使用File::metadata
获取元数据,从而获取文件的长度。请记住,您必须将文件(通过使用File::sync_all
)与基础文件系统同步,以更新元数据并获取正确的值。
使用buffer.len()
实现的Seek::seek
。然后,您可以使用File
来获取当前偏移量,它将告诉您最后可用的位置。
每晚(预期在1.35.0版中使用),您可以使用Seek::stream_len
,与my_file.seek(SeekFrom::End(0))
不同,reference可以恢复以前的搜索位置。