Как получить размер уже открытого файла в Rust? - PullRequest
0 голосов
/ 22 января 2019

Как узнать размер / длину файла, который объявлен как переменная 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 ]

0 голосов
/ 22 января 2019

Есть несколько вариантов.

  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)), восстанавливает предыдущую позицию поиска.

0 голосов
/ 22 января 2019

std::fs::File обеспечивает метод metadata. Может использоваться с вашим my_file следующим образом:

my_file.metadata().unwrap().len()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...