ОК, так что у вас проблема с двумя частями.
- Вы хотите просмотреть все файлы в каталоге и создать контрольную сумму.
- Там могут быть некоторые недоступные файлы, но вы хотите, чтобы вы также включили их в контрольную сумму.
Итак, я предлагаю своего рода обходное решение.
- Если файл доступен, создайте для него контрольную сумму.
- Если нет, добавьте имя файла в список.
- Позже, проверяя целостность, мы проверяем и контрольную сумму, и список недоступных файлов.
Итак, предположим, что следующий метод использует пример в этом ответе SO и создает список доступных файлов. Но, кроме того, в случае, если файл недоступен, он добавляет его в список.
private static void FindFiles(string path, string file_pattern, bool recurse, out List<string> accessible, out List<string> inaccessible)
{
accessible = new List<string>();
inaccessible = new List<string>();
// This creates two lists, one with accessible files and one with inaccessible files.
}
Теперь давайте изменим ваши методы.
private string ChecksumFolder(string path, out List<string> inaccessibleFiles)
{
inaccessibleFiles = null;
FindFiles(path, "*", true, out List<string> accessible, out List<string> inaccessible);
inaccessibleFiles = inaccessible;
StringBuilder allChecksum = new StringBuilder();
for (int count = 0; count < accessible.Count; count++)
{
allChecksum.Append(CreateChecksumFromFile(accessible[count]));
}
return CreateChecksumFromString(allChecksum.ToString());
}
Теперь у вас есть контрольная сумма для этой папки с использованием всех доступных файлов и список недоступных файлов. Вы сохраняете оба и отправляете их в любое приложение, которое позже будет проверять целостность. И с этой стороны вы сопоставляете контрольную сумму, а также проверяете, совпадают ли файлы в списке недоступных файлов.