22

我正在使用标准 VB.NET 库来提取和压缩文件。它也可以,但是当我必须提取并且文件已经存在时,问题就来了。

我使用的代码

进口:

Imports System.IO.Compression

崩溃时我调用的方法

ZipFile.ExtractToDirectory(archivedir, BaseDir)

archivedir 和 BaseDir 也已设置,实际上如果没有要覆盖的文件,它就可以工作。问题恰好在有的时候出现。

如何在不使用第三方库的情况下覆盖提取文件?

(注意我使用 System.IO.Compression 和 System.IO.Compression.Filesystem 作为参考)

由于文件放在多个文件夹中已经存在文件我会避免手动

IO.File.Delete(..)
4

2 回答 2

25

使用ExtractToFile with overwrite as true 覆盖与目标文件同名的现有文件

    Dim zipPath As String = "c:\example\start.zip" 
    Dim extractPath As String = "c:\example\extract" 

    Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
        For Each entry As ZipArchiveEntry In archive.Entries
            entry.ExtractToFile(Path.Combine(extractPath, entry.FullName), True)
        Next 
    End Using 
于 2013-03-18T00:53:37.763 回答
12

我发现以下实现完全可以解决上述问题,运行时没有错误,并成功覆盖现有文件并根据需要创建目录。

        ' Extract the files - v2
        Using archive As ZipArchive = ZipFile.OpenRead(fullPath)
            For Each entry As ZipArchiveEntry In archive.Entries
                Dim entryFullname = Path.Combine(ExtractToPath, entry.FullName)
                Dim entryPath = Path.GetDirectoryName(entryFullName)
                If (Not (Directory.Exists(entryPath))) Then
                    Directory.CreateDirectory(entryPath)
                End If

                Dim entryFn = Path.GetFileName(entryFullname)
                If (Not String.IsNullOrEmpty(entryFn)) Then
                    entry.ExtractToFile(entryFullname, True)
                End If
            Next
        End Using
于 2015-05-01T21:57:40.800 回答