private int CheckExtractExistingFile(string baseDir, string targetFileName)
{
int loop = 0;
// returns: 0 == extract, 1 = don't, 2 = cancel
do
{
switch (ExtractExistingFile)
{
case ExtractExistingFileAction.OverwriteSilently:
WriteStatus("the file {0} exists; will overwrite it...", targetFileName);
return 0;
case ExtractExistingFileAction.DoNotOverwrite:
WriteStatus("the file {0} exists; not extracting entry...", FileName);
OnAfterExtract(baseDir);
return 1;
case ExtractExistingFileAction.InvokeExtractProgressEvent:
if (loop>0)
throw new ZipException(String.Format("The file {0} already exists.", targetFileName));
OnExtractExisting(baseDir);
if (_ioOperationCanceled)
return 2;
// loop around
break;
case ExtractExistingFileAction.Throw:
default:
throw new ZipException(String.Format("The file {0} already exists.", targetFileName));
}
loop++;
}
while (true);
}