Не можете распаковать один и тот же файл дважды?
У меня есть приложение "стиль рабочего списка", где пользователь выбирает zip-файл из списка, а затем нажимает кнопку, чтобы распаковать его в локальную папку.
Вот выдержка из используемого кода:
ZipFile zip = Ionic.Zip.ZipFile.Read(sourcePackage);
zip.ExtractAll(destination);
zip.Dispose();
В первый раз все работает нормально, но если пользователь пытается разархивировать тот же файл снова (даже после разархивирования нескольких других), он идет слишком быстро, и все, что создается в папке назначения, выглядит как временный файл (например, 'x2hiex0z).pj0').
Как будто Ionic.Zip.ZipFile.Read создает кэш ранее разархивированных имен файлов.
Если так, как я могу очистить это, чтобы я мог заставить это разархивировать файл снова?
1 ответ
Я догадываюсь, вы получаете какое-то исключение "File Exist"
Пытаться:
OpenFileDialog open = new OpenFileDialog();
open.Filter = "zip Datei (.zip)|*.zip";
open.RestoreDirectory = true;
if (open.ShowDialog() == DialogResult.OK)
{
try
{
ZipFile zip = Ionic.Zip.ZipFile.Read(open.FileName);
zip.ExtractAll(".\\");
zip.Dispose();
}
catch (ZipException zex)
{
MessageBox.Show(zex.Message);
}
}
или с темой:
private void open()
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "zip Datei (.zip)|*.zip";
open.RestoreDirectory = true;
if (open.ShowDialog() == DialogResult.OK)
{
Thread t1 = new Thread
(delegate()
{
try
{
using (ZipFile zip = Ionic.Zip.ZipFile.Read(open.FileName))
{
zip.ExtractProgress += zip_ExtractProgress;
zip.ExtractAll(".\\", ExtractExistingFileAction.OverwriteSilently);
}
}
catch (ZipException zex)
{
error(zex.Message);
}
});
t1.IsBackground = true;
t1.Start();
}
}
private void zip_ExtractProgress(object sender, ExtractProgressEventArgs args)
{
update(args.TotalBytesToTransfer, args.BytesTransferred);
}
private void update(long ueTotal, long done)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(() => { update(ueTotal, done); }));
}
else
{
if (ueTotal > 0)
{
double prz = (100d / ueTotal) * done;
lblProz.Text = prz.ToString("###.##");
}
}
}