Помните, что вы можете изменять файлы ZIP, например, если их несколько укоротить, ZIP-файл все равно будет действительным. С моим тестовым файлом я удалил последние 5000 байтов, и он был объявлен действительным. Я успешно извлек его, используя мою программу ZIP. Конечно, извлеченное содержимое было неверным, а не оригинальное. Возможно, это то, что происходило с тобой. Возможно, ваши попытки испортить ваш ZIP-файл фактически не превращали его в недопустимый ZIP-файл.
Delphi XE2 поставляется со встроенным ZIP-компонентом, который хорошо работал в моем простом тесте и успешно обнаружил неверный файл, как только я обрезал файл достаточно, чтобы сделать его действительно поврежденным.
Я использовал метод IsValid
для проверки правильности. Вот моя очень простая тестовая программа.
program ZipTest;
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.Zip;
procedure Main;
const
ZipArchive = 'C:\desktop\test.zip';
var
ZipFile: TZipFile;
FileName: string;
begin
ZipFile := TZipFile.Create;
try
if ZipFile.IsValid(ZipArchive) then begin
ZipFile.Open(ZipArchive, zmRead);
for FileName in ZipFile.FileNames do begin
Writeln(FileName);
end;
end else begin
Writeln(ZipArchive + ' not valid');
end;
finally
ZipFile.Free;
end;
end;
begin
try
Main;
Readln;
except
on E: Exception do begin
Writeln(E.ClassName, ': ', E.Message);
end;
end;
end.