Я работаю в компании, которая имеет облачное базовое приложение, которое позволяет пользователям переносить файлы данных с ПК на мобильное устройство и обратно, позволяя пользователям обновлять и редактировать свои файлы в полевых условиях.
Случайно я столкнусь с проблемой, при которой во время передачи файла через веб-структуры структура zip будет повреждена, и случайный файл в zip-файле будет иметь ошибки crc.
Как правило, это будет изображение, но не всегда.Это вызывает проблемы с нашим программным обеспечением и препятствует загрузке файлов.Я написал инструмент, который сканирует zip-файл, ищет и исправляет ошибки в xml-файлах в zip-файле;однако функция System.IO.Compression.ZipFile.ExtractToDirectory не выдает ошибки, а извлекает файл и записывает его.
Вызов System.IO.Compression.ZipFile.CreateFromDirectory, который я делаю позже, затем архивирует этот файл, снова без ошибок, что приводит к тому, что zip-файл все еще имеет ошибку crc и все еще не открывается в нашем программном обеспечении.
Итак, вот мое connumdry, Как я могу проверить файлы, которые я извлекаю из zip-файла на наличие ошибок crc, и не помещать их в новый zip-файл, как только я закончу с другой моей работой?
У меня естьпопробовал несколько вещей и, если не считать загрузку каждого типа файла в какой-либо читатель (существует около дюжины типов файлов, которые могут быть в zip), я ничего не получил.
PS Я очень новичок вC # и у меня нет формального обучения кодированию, поэтому я могу задать несколько глупых вопросов, извините.: D
Пример можно найти здесь
ОК. Я попробовал то, что было предложено, и вот что я получил
Используя следующий код:
//https://johnlnelson.com/tag/zip-archive-c/ using ZipArchive
string zipFile = FileName;
string extractPath = @"C:\Temp\XAP\" + xapName;
ZipArchive zipArchive = ZipFile.OpenRead(zipFile);
if (zipArchive.Entries != null && zipArchive.Entries.Count > 0)
{
foreach (ZipArchiveEntry entry in zipArchive.Entries)
{
entry.ExtractToFile(System.IO.Path.Combine(extractPath, entry.FullName));
}
}
и генерируется следующая ошибка
ERROR:
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Temp\XAP\CRC in bmp\assignmentmap.bmp'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.Compression.ZipFile
Код не может извлечь ни один из файлов в zip-файле, а не только поврежденный.