Стартовый пул
This commit is contained in:
356
fwzip/Demos/Test Build With Exception/BuildWithException.dpr
Normal file
356
fwzip/Demos/Test Build With Exception/BuildWithException.dpr
Normal file
@@ -0,0 +1,356 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ****************************************************************************
|
||||
// * Project : FWZip
|
||||
// * Unit Name : BuildWithException
|
||||
// * Purpose : Демонстрация работы с исключениями
|
||||
// * : при создании и распаковке архива
|
||||
// * Author : Александр (Rouse_) Багель
|
||||
// * Copyright : © Fangorn Wizards Lab 1998 - 2023.
|
||||
// * Version : 2.0.0
|
||||
// * Home Page : http://rouse.drkb.ru
|
||||
// * Home Blog : http://alexander-bagel.blogspot.ru
|
||||
// ****************************************************************************
|
||||
// * Stable Release : http://rouse.drkb.ru/components.php#fwzip
|
||||
// * Latest Source : https://github.com/AlexanderBagel/FWZip
|
||||
// ****************************************************************************
|
||||
//
|
||||
// Используемые источники:
|
||||
// ftp://ftp.info-zip.org/pub/infozip/doc/appnote-iz-latest.zip
|
||||
// https://zlib.net/zlib-1.2.13.tar.gz
|
||||
// http://www.base2ti.com/
|
||||
//
|
||||
|
||||
// Данный пример показывает работу с различными ошибками могущими возникнуть
|
||||
// в процессе создания и распаковки архива, а так-же способы их обработки.
|
||||
|
||||
program BuildWithException;
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$MODE Delphi}
|
||||
{$H+}
|
||||
{$ELSE}
|
||||
{$APPTYPE CONSOLE}
|
||||
{$ENDIF}
|
||||
|
||||
uses
|
||||
{$IFNDEF FPC}
|
||||
Windows,
|
||||
{$ENDIF}
|
||||
Classes,
|
||||
SysUtils,
|
||||
TypInfo,
|
||||
FWZipConsts,
|
||||
FWZipWriter,
|
||||
FWZipReader,
|
||||
FWZipUtils;
|
||||
|
||||
const
|
||||
INVALID_HANDLE_VALUE = THandle(-1);
|
||||
ReadLock = fmOpenRead or fmShareDenyNone;
|
||||
{$IFDEF LINUX}
|
||||
WriteLock = fmOpenWrite or fmShareExclusive;
|
||||
{$ELSE}
|
||||
WriteLock = fmOpenWrite or fmShareDenyNone;
|
||||
{$ENDIF}
|
||||
|
||||
var
|
||||
Writer: TFWZipWriter;
|
||||
Reader: TFWZipReader;
|
||||
Method: TMethod;
|
||||
hLockedFile: THandle;
|
||||
|
||||
//
|
||||
// Процедура выводит результат работы функции BuildZip
|
||||
// =============================================================================
|
||||
procedure ShowBuildResult(Value: TBuildZipResult);
|
||||
begin
|
||||
Writeln(GetEnumName(TypeInfo(TBuildZipResult), Integer(Value)));
|
||||
end;
|
||||
|
||||
//
|
||||
// Процедура выводит результат работы функции Extract
|
||||
// =============================================================================
|
||||
procedure ShowManualExtractResult(const ElementName: string;
|
||||
Value: TExtractResult);
|
||||
begin
|
||||
Writeln(Format('%s -> %s', [ElementName,
|
||||
GetEnumName(TypeInfo(TExtractResult), Integer(Value))]));
|
||||
end;
|
||||
|
||||
procedure DropLock;
|
||||
begin
|
||||
FileClose(hLockedFile);
|
||||
hLockedFile := INVALID_HANDLE_VALUE;
|
||||
end;
|
||||
|
||||
//
|
||||
// смотри описание обработчика ниже
|
||||
// =============================================================================
|
||||
procedure OnException1({%H-}Self, Sender: TObject; {%H-}E: Exception;
|
||||
const ItemIndex: Integer; var Action: TExceptionAction;
|
||||
var NewFilePath: string; {%H-}NewFileData: TMemoryStream);
|
||||
var
|
||||
CurrentFilePath: string;
|
||||
Src: THandleStream;
|
||||
Dst: TFileStream;
|
||||
hFile: THandle;
|
||||
begin
|
||||
{$IFDEF LINUX}
|
||||
// с блокировкой под юниксом проблемы, поэтому пусть будет так
|
||||
DropLock;
|
||||
{$ENDIF}
|
||||
CurrentFilePath := string(TFWZipWriter(Sender)[ItemIndex].FilePath);
|
||||
NewFilePath := ChangeFileExt(CurrentFilePath, '.tmp');
|
||||
hFile := FileOpen(CurrentFilePath, ReadLock);
|
||||
try
|
||||
Src := THandleStream.Create(hFile);
|
||||
try
|
||||
Dst := TFileStream.Create(NewFilePath, fmCreate);
|
||||
try
|
||||
Dst.CopyFrom(Src, 0);
|
||||
finally
|
||||
Dst.Free;
|
||||
end;
|
||||
finally
|
||||
Src.Free;
|
||||
end;
|
||||
finally
|
||||
FileClose(hFile);
|
||||
end;
|
||||
Action := eaUseNewFilePathAndDel;
|
||||
end;
|
||||
|
||||
//
|
||||
// смотри описание обработчика ниже
|
||||
// =============================================================================
|
||||
procedure OnException2({%H-}Self, Sender: TObject; {%H-}E: Exception;
|
||||
const {%H-}ItemIndex: Integer; var Action: TExceptionAction;
|
||||
var {%H-}NewFilePath: string; {%H-}NewFileData: TMemoryStream);
|
||||
begin
|
||||
DropLock;
|
||||
Action := eaRetry;
|
||||
end;
|
||||
|
||||
//
|
||||
// смотри описание обработчика ниже
|
||||
// =============================================================================
|
||||
procedure OnException3({%H-}Self, Sender: TObject; {%H-}E: Exception;
|
||||
const ItemIndex: Integer; var Action: TExceptionAction;
|
||||
var {%H-}NewFilePath: string; NewFileData: TMemoryStream);
|
||||
var
|
||||
Src: THandleStream;
|
||||
hFile: THandle;
|
||||
begin
|
||||
{$IFDEF LINUX}
|
||||
// с блокировкой под юниксом проблемы, поэтому пусть будет так
|
||||
DropLock;
|
||||
{$ENDIF}
|
||||
hFile := FileOpen(TFWZipWriter(Sender)[ItemIndex].FilePath, ReadLock);
|
||||
try
|
||||
Src := THandleStream.Create(hFile);
|
||||
try
|
||||
NewFileData.CopyFrom(Src, 0);
|
||||
finally
|
||||
Src.Free;
|
||||
end;
|
||||
finally
|
||||
FileClose(hFile);
|
||||
end;
|
||||
Action := eaUseNewFileData;
|
||||
end;
|
||||
|
||||
//
|
||||
// смотри описание обработчика ниже
|
||||
// =============================================================================
|
||||
procedure OnDuplicate({%H-}Self, Sender: TObject;
|
||||
var Path: string; var Action: TDuplicateAction);
|
||||
begin
|
||||
Path := MakeUniqueName(Path);
|
||||
Action := daUseNewFilePath;
|
||||
end;
|
||||
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
SetCurrentDir(ExtractFilePath(ParamStr(0)));
|
||||
try
|
||||
|
||||
// Самая банальная ошибка при создании архива - это отсутствие доступа
|
||||
// к добавляемому в архив файлу.
|
||||
// Например вот такой код пытается заархивировать содержимое корневой
|
||||
// папки в которой искусственно залочен один из элементов
|
||||
// В этом случае возникнет ошибка доступа к залоченому файлу.
|
||||
// Если не назначены обработчики исключений, то такой файл будет пропущен
|
||||
// (действие по умолчанию eaSkip) и функция BuildZip
|
||||
// вернет следующие коды ошибок:
|
||||
// brFailed - в случае если в папке небыло других файлов
|
||||
// кроме залоченного (т.е. в архив добавлять нечего)
|
||||
// brPartialBuild - в случае если в архив все-же были добавлены какие-либо файлы,
|
||||
// но некоторые из них были пропущены
|
||||
|
||||
Writer := TFWZipWriter.Create;
|
||||
try
|
||||
Writer.AddFolder('', '..\..\', '*.pas', False);
|
||||
// лочим один из файлов для демонстрации
|
||||
hLockedFile := FileOpen(PathCanonicalize('..\..\' + Writer[0].FileName), WriteLock);
|
||||
try
|
||||
Write('BuildWithException1.zip -> ');
|
||||
ShowBuildResult(Writer.BuildZip('..\DemoResults\BuildWithException1.zip'));
|
||||
finally
|
||||
FileClose(hLockedFile);
|
||||
end;
|
||||
finally
|
||||
Writer.Free;
|
||||
end;
|
||||
|
||||
// узнать какие файлы были пропущены и попытаться исправить данную ситуацию
|
||||
// можно перекрытием события OnException
|
||||
// В следующем примере будет показано как все-же обработать такую ошибку
|
||||
// и добавить проблемный файл в архив
|
||||
|
||||
Writer := TFWZipWriter.Create;
|
||||
try
|
||||
Writer.AddFolder('', '..\..\', '*.pas', False);
|
||||
|
||||
// лочим один из файлов для демонстрации
|
||||
hLockedFile := FileOpen(PathCanonicalize('..\..\' + Writer[0].FileName), WriteLock);
|
||||
try
|
||||
|
||||
// Назначаем обработчик через который мы будем обрабатывать ошибку
|
||||
// В обработчике OnException1 будет создаваться копия файла
|
||||
// после чего мы укажем в параметре NewFilePath новый путь к файлу,
|
||||
// а свойство Action выставим eaUseNewFilePathAndDel
|
||||
// Таким образом мы уведомляем FWZip что нужно повторить попытку
|
||||
// архивации файла, при этом необходимо использовать новый путь к файлу,
|
||||
// после чего данный файл следует удалить.
|
||||
|
||||
Method.Code := @OnException1;
|
||||
Method.Data := Writer;
|
||||
Writer.OnException := TZipBuildExceptionEvent(Method);
|
||||
|
||||
Write('BuildWithException2.zip -> ');
|
||||
ShowBuildResult(Writer.BuildZip('..\DemoResults\BuildWithException2.zip'));
|
||||
|
||||
{$IFDEF LINUX}
|
||||
if hLockedFile = INVALID_HANDLE_VALUE then
|
||||
hLockedFile := FileOpen(PathCanonicalize('..\..\' + Writer[0].FileName), WriteLock);
|
||||
{$ENDIF}
|
||||
|
||||
// второй вариант, обработки показан в обработчике OnException2
|
||||
// в нем мы снимаем исскуственную блокировку файла и выставляем
|
||||
// свойство Action в eaRetry.
|
||||
// Таким образом мы уведомляем FWZip что нужно повторить попытку
|
||||
// архивации файла
|
||||
|
||||
Method.Code := @OnException2;
|
||||
Method.Data := Writer;
|
||||
Writer.OnException := TZipBuildExceptionEvent(Method);
|
||||
|
||||
Write('BuildWithException3.zip -> ');
|
||||
ShowBuildResult(Writer.BuildZip('..\DemoResults\BuildWithException3.zip'));
|
||||
|
||||
// для демонстрации возвращаем блокировку на место
|
||||
if hLockedFile = INVALID_HANDLE_VALUE then
|
||||
hLockedFile := FileOpen(PathCanonicalize('..\..\' + Writer[0].FileName), WriteLock);
|
||||
|
||||
// третий вариант, обработки показан в обработчике OnException3
|
||||
// в нем мы загружаем любым способом данные файла в стрим и
|
||||
// выставляем свойство Action в eaUseNewFileData
|
||||
// Таким образом данные будут браться непосредственно из стрима
|
||||
// NewFileData
|
||||
|
||||
Method.Code := @OnException3;
|
||||
Method.Data := Writer;
|
||||
Writer.OnException := TZipBuildExceptionEvent(Method);
|
||||
|
||||
Write('BuildWithException4.zip -> ');
|
||||
ShowBuildResult(Writer.BuildZip('..\DemoResults\BuildWithException4.zip'));
|
||||
|
||||
// ориентируясь на тип исключения можно реализовывать разнулю логику обработчика.
|
||||
// если вы не знаете как обработать то или иное исключение,
|
||||
// следует выставить свойство Action в eaSkip (выставлено по умолчанию)
|
||||
// для того чтобы пропустить проблемный файл, или eaAbort,
|
||||
// прервав таким образом создание архива.
|
||||
|
||||
finally
|
||||
if hLockedFile <> INVALID_HANDLE_VALUE then
|
||||
FileClose(hLockedFile);
|
||||
end;
|
||||
finally
|
||||
Writer.Free;
|
||||
end;
|
||||
|
||||
// При распаковке частой ошибочной ситуацией является попытка
|
||||
// перезаписи уже существующего на диске файла, либо ошибка
|
||||
// распаковки архива, созданного сторонним архиватором.
|
||||
// Обработка ошибки распаковки решается использованием более
|
||||
// новой версии ZLib (см. Readme.txt пункт 9)
|
||||
// Возникновение ошибки по другим причинам приведет к возникновению
|
||||
// события OnException. Если данное событие не перекрыто,
|
||||
// то в случае вызова метода TFWZipReader.ExtractAll
|
||||
// распаковка архива будет остановлена.
|
||||
// В случае, если данное событие перекрыто, то решение
|
||||
// о остановке распаковки должен принимать программист,
|
||||
// выставлением флага Handled:
|
||||
// (Handled = True, исключение обработано, можно продолжить распаковку)
|
||||
|
||||
// для демонстрации проэмулируем ошибку перезаписи,
|
||||
// для этого нужно дважды распаковать один и тот-же архив
|
||||
// в одну и ту-же папку
|
||||
|
||||
Reader := TFWZipReader.Create;
|
||||
try
|
||||
Reader.LoadFromFile('..\DemoResults\BuildWithException1.zip');
|
||||
|
||||
// распаковываем первый раз
|
||||
|
||||
Reader.ExtractAll('..\DemoResults\BuildWithExceptionUnpack\');
|
||||
|
||||
// теперь пробуем распаковать повторно.
|
||||
// исключения в данном случае не произойдет, но все элементы будут пропущены
|
||||
|
||||
Reader.ExtractAll('..\DemoResults\BuildWithExceptionUnpack\');
|
||||
|
||||
// пропуск элементов можно увидеть и при ручной распаковке.
|
||||
// т.к. вызов Reader[I].Extract в отличие от Reader.ExtractAll
|
||||
// возвращает результат
|
||||
|
||||
Writeln('Manual extract:');
|
||||
for I := 0 to Reader.Count - 1 do
|
||||
ShowManualExtractResult(
|
||||
string(Reader[I].FileName),
|
||||
Reader[I].Extract('..\DemoResults\BuildWithExceptionUnpack\', ''));
|
||||
|
||||
// как можно заметить, все элементы действительно были пропущены
|
||||
// (Reader[I].Extract вернул erSkiped для каждого элемента)
|
||||
|
||||
// Для обработки данной ситуации в режиме автоматической распаковки (ExtractAll)
|
||||
// необходимо перекрыть событие OnDuplicate у класса TFWZipReader.
|
||||
// В случае ручной распаковки, перекрывать событие OnDuplicate требуется
|
||||
// у каждого элемента (Reader.Items[индекс элемента].OnDuplicate)
|
||||
|
||||
Method.Code := @OnDuplicate;
|
||||
Method.Data := Reader;
|
||||
Reader.OnDuplicate := TZipDuplicateEvent(Method);
|
||||
|
||||
// теперь попробуем повторно распаковать.
|
||||
// при возникновении события OnDuplicate в обработчике элементу будет
|
||||
// назначено новое имя и параметр Action будет выставлен в daUseNewFilePath.
|
||||
// Таким образом мы укажем TFWZipReader-у что необходимо распаковать
|
||||
// файл с новым именем...
|
||||
// (т.е. получим аналог создания файлов в проводнике Windows, например:
|
||||
// New folder -> New folder (2) -> New folder (3) и т.д.)
|
||||
|
||||
Reader.ExtractAll('..\DemoResults\BuildWithExceptionUnpack\');
|
||||
|
||||
finally
|
||||
Reader.Free;
|
||||
end;
|
||||
|
||||
except
|
||||
on E: Exception do
|
||||
Writeln(E.ClassName, ': ', E.Message);
|
||||
end;
|
||||
Readln;
|
||||
end.
|
152
fwzip/Demos/Test Build With Exception/BuildWithException.dproj
Normal file
152
fwzip/Demos/Test Build With Exception/BuildWithException.dproj
Normal file
@@ -0,0 +1,152 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{D336C006-9204-4B8B-A8C2-88CAB9F2693C}</ProjectGuid>
|
||||
<MainSource>BuildWithException.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Console</AppType>
|
||||
<FrameworkType>None</FrameworkType>
|
||||
<ProjectVersion>19.2</ProjectVersion>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_K>false</DCC_K>
|
||||
<DCC_E>false</DCC_E>
|
||||
<DCC_N>false</DCC_N>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName=;CFBundleDisplayName=;UIDeviceFamily=;CFBundleIdentifier=;CFBundleVersion=;CFBundlePackageType=;CFBundleSignature=;CFBundleAllowMixedLocalizations=;UISupportedInterfaceOrientations=;CFBundleExecutable=;CFBundleResourceSpecification=;LSRequiresIPhoneOS=;CFBundleInfoDictionaryVersion=;CFBundleDevelopmentRegion=</VerInfo_Keys>
|
||||
<DCC_F>false</DCC_F>
|
||||
<VerInfo_Locale>1049</VerInfo_Locale>
|
||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_ImageBase>00400000</DCC_ImageBase>
|
||||
<SanitizedProjectName>BuildWithException</SanitizedProjectName>
|
||||
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
||||
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
|
||||
<DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_DebugInformation>0</DCC_DebugInformation>
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<DCC_UnitSearchPath>../../;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
|
||||
<Manifest_File>(None)</Manifest_File>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">BuildWithException.dpr</Source>
|
||||
</Source>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">1</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">0</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">0</VersionInfo>
|
||||
<VersionInfo Name="Debug">False</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">False</VersionInfo>
|
||||
<VersionInfo Name="Special">False</VersionInfo>
|
||||
<VersionInfo Name="Private">False</VersionInfo>
|
||||
<VersionInfo Name="DLL">False</VersionInfo>
|
||||
<VersionInfo Name="Locale">1049</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1251</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName"/>
|
||||
<VersionInfoKeys Name="FileDescription"/>
|
||||
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName"/>
|
||||
<VersionInfoKeys Name="LegalCopyright"/>
|
||||
<VersionInfoKeys Name="LegalTrademarks"/>
|
||||
<VersionInfoKeys Name="OriginalFilename"/>
|
||||
<VersionInfoKeys Name="ProductName"/>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"/>
|
||||
<VersionInfoKeys Name="CFBundleName"/>
|
||||
<VersionInfoKeys Name="CFBundleDisplayName"/>
|
||||
<VersionInfoKeys Name="UIDeviceFamily"/>
|
||||
<VersionInfoKeys Name="CFBundleIdentifier"/>
|
||||
<VersionInfoKeys Name="CFBundleVersion"/>
|
||||
<VersionInfoKeys Name="CFBundlePackageType"/>
|
||||
<VersionInfoKeys Name="CFBundleSignature"/>
|
||||
<VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
|
||||
<VersionInfoKeys Name="UISupportedInterfaceOrientations"/>
|
||||
<VersionInfoKeys Name="CFBundleExecutable"/>
|
||||
<VersionInfoKeys Name="CFBundleResourceSpecification"/>
|
||||
<VersionInfoKeys Name="LSRequiresIPhoneOS"/>
|
||||
<VersionInfoKeys Name="CFBundleInfoDictionaryVersion"/>
|
||||
<VersionInfoKeys Name="CFBundleDevelopmentRegion"/>
|
||||
</VersionInfoKeys>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k270.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp270.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Platforms>
|
||||
<Platform value="Win32">True</Platform>
|
||||
<Platform value="Win64">False</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
|
||||
</Project>
|
91
fwzip/Demos/Test Build With Exception/BuildWithException.lpi
Normal file
91
fwzip/Demos/Test Build With Exception/BuildWithException.lpi
Normal file
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasUsesSectionForAllUnits Value="False"/>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="BuildWithException"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="LazUtils"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="BuildWithException.dpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="..\DemoResults\MultyPartZip\ZIP\FWZipConsts.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="..\DemoResults\MultyPartZip\ZIP\FWZipReader.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="..\DemoResults\MultyPartZip\ZIP\FWZipWriter.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="..\..;$(ProjOutDir)"/>
|
||||
<Libraries Value="..\..\fpc_lib"/>
|
||||
<OtherUnitFiles Value="..\.."/>
|
||||
<UnitOutputDirectory Value="."/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<SyntaxMode Value="Delphi"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
<Other>
|
||||
<CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
24
fwzip/Demos/Test Build With Exception/clear.bat
Normal file
24
fwzip/Demos/Test Build With Exception/clear.bat
Normal file
@@ -0,0 +1,24 @@
|
||||
rd /S /Q "%cd%\backup\"
|
||||
rd /S /Q "%cd%\ConverterBackup\"
|
||||
rd /S /Q "%cd%\lib\"
|
||||
rd /S /Q "%cd%\__history\"
|
||||
rd /S /Q "%cd%\__recovery\"
|
||||
del "%cd%\*.o"
|
||||
del "%cd%\*.a"
|
||||
del "%cd%\*.or"
|
||||
del "%cd%\*.lps"
|
||||
del "%cd%\*.obj"
|
||||
del "%cd%\*.exe"
|
||||
del "%cd%\*.ppu"
|
||||
del "%cd%\*.dcu"
|
||||
del "%cd%\*.log"
|
||||
del "%cd%\*.compiled"
|
||||
del "%cd%\*.cfg"
|
||||
del "%cd%\*.dof"
|
||||
del "%cd%\*.dproj.local"
|
||||
del "%cd%\*.identcache"
|
||||
del "%cd%\*.dsk"
|
||||
del "%cd%\*.skincfg"
|
||||
del "%cd%\*.bak"
|
||||
del "%cd%\*.rsm"
|
||||
del "%cd%\*.~*"
|
Reference in New Issue
Block a user