解压缩后无法删除 zip 文件

本文关键字:zip 文件 删除 解压缩 | 更新日期: 2023-09-27 18:36:25

我有一个提取多个zip文件的方法,但在应用程序关闭之前无法删除它们。我认为这是DotNetZip version 1.9.1.5库中的错误。

我的压缩文件:

Hezareh.z01
Hezareh.z02
Hezareh.z03
Hezareh.zip

提取文件的代码:

        private void InstallUpdates()
        {
            string tempDir = Path.Combine(Environment.CurrentDirectory, MainViewModel.TemporaryDirectoryName);
            string mainZipFileName = Path.Combine(tempDir, 
                _updateConfig.ZipFiles.Single(f => f.IsFirstPart).PathOnClient); // i'm sure this is Hezareh.zip file
            string installPath = Path.Combine(Environment.CurrentDirectory, Properties.Settings.Default.InstallationDirectory);
            // i also tried: using (var zipFile = new ZipFile(mainZipFileName)) 
            using (var zipFile = ZipFile.Read(mainZipFileName))
            {
                // same problem for ExtractAll method.
                // zipFile.ExtractAll(installPath, ExtractExistingFileAction.OverwriteSilently);
                foreach (ZipEntry entiry in zipFile)
                {
                    entiry.Extract(installPath, ExtractExistingFileAction.OverwriteSilently);
                }
                // zipFile.Close() or any same method does not exists and zipFile.Dispose() is called
                // automatically but even when i call it manually still have same problem.
            }
            DeleteFiles();
        }
        private void DeleteFiles()
        {
            var files = Directory.GetFiles(Path.Combine(Environment.CurrentDirectory, MainViewModel.TemporaryDirectoryName));
            foreach (string file in files)
            {
                File.Delete(file); // exception occure here 
            }
        }

这个问题对我不起作用,我要烧我的头。

例外:

 The process cannot access the file 'D:'Projects'...'App'bin'Debug'UpdaterTemp'Hezareh.z01' because it is being used by another process.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.File.Delete(String path)
   at Meshkat.Updater.App.ViewModels.InstallUpdatesViewModel.DeleteDownloadedUpdates() in D:'Projects'Meshkat.Updater'Meshkat.Updater.App'ViewModels'InstallUpdatesViewModel.cs:line 60
   at Meshkat.Updater.App.ViewModels.InstallUpdatesViewModel.Hide() in D:'Projects'Meshkat.Updater'Meshkat.Updater.App'ViewModels'InstallUpdatesViewModel.cs:line 129
   at Meshkat.Updater.App.RelayCommand.Execute(Object parameter) in D:'Projects'Meshkat.Updater'Meshkat.Updater.App'RelayCommand.cs:line 146
   at MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject sender, MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.Dispatcher.Invoke(DispatcherPriority priority, Delegate method, Object arg)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at Meshkat.Updater.App.App.Main() in D:'Projects'Meshkat.Updater'Meshkat.Updater.App'obj'x86'Debug'App.g.cs:line 0
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

解压缩后无法删除 zip 文件

v1.9.1.6 之前的版本有一个错误,即解压缩后无法删除文件。也许您需要升级?但是告诉我们您的版本。

有关更多信息,请参见 CodePlex 上的此工作项:http://dotnetzip.codeplex.com/workitem/12521