Я пытаюсь создать процесс для сравнения двух папок, которые должны содержать точно такие же файлы. Хотелось бы иметь возможность изменять содержимое файла без изменения атрибутов, как если бы файл был случайно поврежден. Любой способ добиться этого?
Используйте инструмент редактирования диска, чтобы найти некоторые блоки для рассматриваемого файла и изменить их содержимое. Погуглите фразу вроде "шестнадцатеричный редактор диска", чтобы найти его. Теперь ваш файл поврежден, и вы не использовали вызовы API ОС, которые также обновили бы отметки времени в файле.
Используйте PowerShell Get-FileHash
функция. Он будет вычислять хэш на основе содержимого файла, а не отметок времени. Тогда вы просто сравните хэш FileA
к FileB
. Если содержимое одинаковое, значит, это должен быть один и тот же хеш. Таким образом, вам не нужно беспокоиться о том, чтобы отредактировать файл, чтобы он отличался, и сравнивать данные отметки времени.
Источник: https://msdn.microsoft.com/en-us/powershell/reference/6/microsoft.powershell.utility/get-filehash
В Get-FileHash командлет вычисляет значение хеш-функции для файла, используя указанный алгоритм хеширования. Хеш-значение - это уникальное значение, соответствующее содержимому файла. Вместо того, чтобы идентифицировать содержимое файла по его имени, расширению или другому обозначению, хэш присваивает уникальное значение содержимому файла. Имена и расширения файлов можно изменить без изменения содержимого файла и без изменения значения хеш-функции. Точно так же можно изменить содержимое файла без изменения имени или расширения. Однако изменение даже одного символа в содержимом файла изменяет хеш-значение файла.
Назначение хеш-значений - предоставить криптографически безопасный способ проверки того, что содержимое файла не было изменено. Хотя некоторые алгоритмы хеширования, включая MD5 и SHA1, больше не считаются защищенными от атак, цель безопасного алгоритма хеширования состоит в том, чтобы сделать невозможным изменение содержимого файла - случайно, злонамеренно или несанкционированно - и поддерживать то же хеш-значение. Вы также можете использовать хеш-значения, чтобы определить, имеют ли два разных файла абсолютно одинаковый контент. Если хеш-значения двух файлов идентичны, содержимое файлов также идентично.
По умолчанию командлет Get-FileHash использует алгоритм SHA256, хотя можно использовать любой алгоритм хеширования, поддерживаемый целевой операционной системой.