Мне нужно скопировать файл из заданного источника в заданный пункт назначения, не только содержимое файла, но и его метаданные. В частности, я должен быть уверен, что время копии будет изменено так же, как и у источника.
Для копирования файла я использую функцию std::fs::copy
. В документации не указано, копируются ли метаданные или нет, и в редких случаях происходит сбой при копировании метаданных файла.
Следующий код:
fs::copy(source, dest)?;
debug_assert_eq!(
fs::metadata(source)?.modified()?,
fs::metadata(dest)?.modified()?
);
иногда паникует:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `SystemTime { tv_sec: 1556721917, tv_nsec: 270615000 }`,
right: `SystemTime { tv_sec: 1556721917, tv_nsec: 0 }`',
Когда это не удается, поле tv_nsec
всегда устанавливается в 0.
Это ошибка std::fs::copy
? Как я могу скопировать метаданные файла тоже?