Reputation: 6882
How can I get the size/length of the file that is declared as a File
variable?
There is an option for getting it using the file name via fs::metadata
:
let x = fs::metadata(file_path)?.len();
But I have a file that I already created and edited:
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();
Are there any function that gives the length of the File
?
Upvotes: 35
Views: 26263
Reputation: 13430
There are a few options.
If you create the file like you did (File::create
), you will truncate the file, which means it will set the size of that file to 0
and write the content of buffer
to the file. This means that your file will now have the length buffer.len()
.
Use File::metadata
to get the metadata and therefore get the length of the file. Keep in mind that you have to sync the file (by using File::sync_all
) with the underlying filesystem to update the metadata and get the correct value.
Use Seek::seek
which File
implements. You can then get the current offset by using my_file.seek(SeekFrom::End(0))
which will tell you the last position available.
On nightly (expected for release 1.35.0), you can use Seek::stream_len
, which, unlike seek(SeekFrom::End(0))
, restores the previous seek position.
Upvotes: 20