В файловых системах Windows есть предварительно вычисленный хэш для каждого файла?

Я хочу найти дубликат файла по его хешу. В целях повышения производительности я хочу знать, есть ли сохраненная хэш/контрольная сумма для каждого файла в файловых системах NTFS/FAT. Если есть, мне не нужно вычислять их все для поиска моего файла.

Если есть, как получить к нему доступ с помощью .NET?

Если это поможет, это будут файлы JPEG. У них есть контрольная сумма?


person Jader Dias    schedule 29.09.2009    source источник


Ответы (3)


Такого нет.

person nobody    schedule 29.09.2009
comment
Windows разрешает произвольную запись в файл. Могли бы вы представить, сколько накладных расходов, если бы каждая запись требовала пересчета контрольной суммы файла? - person Mark Ransom; 29.09.2009
comment
Я предполагаю, что по крайней мере файлы EXE имеют контрольную сумму, как и другие типы. - person Jader Dias; 29.09.2009
comment
@MarkRansom Вы можете представить, что он вычисляется только тогда, когда он запрашивается и где-то кешируется, и единственное, что происходит каждый раз, когда файл записывается, - это аннулирование кеша - гораздо дешевле, чем его пересчет каждый раз. - person Evren Kuzucuoglu; 14.01.2013
comment
Кроме того, хэш для обнаружения ошибок не обязательно должен быть криптографически безопасным: можно использовать какой-либо циклический шаблон, такой как простое сложение или исключающее ИЛИ; что-то, где можно компенсировать несколько измененных блоков без пересчета полного хэша. - person Eamon Nerbonne; 02.11.2013

Windows не хранит хэш для каждого файла. Как предполагает Джейдер Диас, существуют контрольные суммы для EXE и DLL, но это не те дроиды, которые вам нужны.

Учтите, что даже если у вас был такой хеш, это все равно не гарантирует уникальность. Если вы нашли два файла с одинаковым хэшем (и размером), вам все равно придется сравнить содержимое, чтобы определить, действительно ли файлы одинаковы.

Файлы JPEG могут иметь некоторые контрольные суммы или хэши, но вы, вероятно, тоже не можете на них рассчитывать.

person Foredecker    schedule 29.09.2009
comment
+1 за Учтите, что даже если бы у вас был такой хэш, это все равно не гарантирует уникальности. ... хотя это правда, что очень небольшие изменения почти всегда приводят к уникальному хэшу, у пользователей есть способ создать эти волшебные крайние условия. - person overslacked; 29.09.2009

Однако в Windows теперь есть поиск, и, если я правильно помню, вы можете написать для него свои собственные плагины (другими словами, для индексации файлов нестандартным способом). Предположительно, вы могли бы написать плагин для JPG, а затем просто выполнять вызовы поискового API для поиска файлов (после того, как Windows выполнит индексацию).

person Vitali    schedule 29.09.2009
comment
Я думаю, что Windows индексирует текст (как имена файлов), а не изображения. - person Jader Dias; 02.10.2009
comment
Из ‹a href=msdn. microsoft.com/en-us/library/›: индексируемое содержимое основано на файлах и типах данных, поддерживаемых надстройками... фильтры, включенные в Window Search, поддерживают более 200 распространенных типов данных, включая .. , текстовые файлы, HTML и многое другое. Конечно, хотя изначально он поддерживает только определенные файлы, как говорится, вы можете индексировать что угодно с помощью специального плагина. Конечно, поиск может индексировать MP3 - JPG ничем не отличается. - person Vitali; 05.10.2009