У меня проблема с необходимостью сравнивать файлы в файлах .tar.gz, чтобы гарантировать, что ни один из файлов в gzip не дублирует. В настоящее время я использую ICSharpCode.SharpZipLib, что упрощает проверку дубликатов в Zip-файлах, поскольку ZipEntry имеет свойство «CRC». Это довольно просто, так как я могу получить crc и filesize и использовать LINQ для поиска любых файлов, которые соответствуют хешу и размеру, а затем бросать ошибку или делать все, что необходимо.Вычислить хэш или сравнить содержимое gzip-файлов в C#
Однако TarEntry не имеет такого свойства или метода, кроме стандартного метода GetHashCode, который, насколько я понимаю, также вычисляет хэш из метаданных файла, поэтому копии одного и того же файла не имеют одинакового хеша. Я могу (быстро) вычислить хэш содержимого файлов gzip? Или есть другой способ сравнить содержимое?
Если вы просто хотите проверить, является ли сам файл '.tar.gz' дубликатом какого-либо другого файла' .tag.gz', то должен быть достаточно хэш-файла 'sha1' или' sha256'. Если вы собираетесь открыть архив и проверить каждый файл по отдельности, не знаете, что предложить там, но криптографический хеш все равно будет лучшим выбором для определения равенства содержания. – ray
Да, я хочу сравнить каждый файл внутри .tar.gz, чтобы убедиться, что в нем нет дубликатов. Спасибо за предложение. Я, вероятно, буду реализовывать это позже, чтобы проверить сами файлы .tar.gz. – ilyketurdles
К сожалению, я не вижу, как вы будете делать то, что хотите, без предварительного извлечения всего содержимого. Кажется, вам нужно распаковать + извлечь архив, а затем обработать каждый отдельный файл криптовым хешем, но вам придется сравнивать все с остальными - 'O (n^2)'. Я думаю, что вы пытаетесь сделать, это плохая идея. Рассмотрите возможность проверки архивов напрямую. Если вы беспокоитесь о дубликатах, попробуйте позаботиться об этом, прежде чем они будут созданы в первую очередь. – ray