1

我正在尝试向我的程序中添加一些压缩代码,但是,我似乎无法使文件夹结构恰到好处。

我希望文件夹看起来像这样:

Root (
   -subfolder1
   -subfolder2
   individual file
   individual file
   individual file)

因此,单个文件将位于 zip 的根文件夹中,而我添加的文件夹将成为根目录的子文件夹。我的代码在下面......

Using zip As New ZipFile()
    For Each item As System.Xml.XmlNode In Source
        If item.InnerText.Contains(".") Then
            zip.AddFile(item.InnerText)
        Else
            zip.AddDirectory(item.InnerText, GetLastDirName(item.InnerText))
        End If
    Next

    For Each item As System.Xml.XmlNode In Destin
        Dim path As String = item.InnerText
        zip.Save(path.Replace(".zip", "") & "_Archive_" & DateString & ".zip")
    Next
End Using

但是,该zip.addfile(item.innertext)行将单个文件添加到完整路径。因此,如果文件是C:\Pictures\image.jpg...,它将在 zip 文件中显示为这样,并带有所有子文件夹。

我也尝试过zip.addfile(item.innertext, "individual files")为单个文件创建一个文件夹......但是,我希望将这些文件存储在根目录中。

有什么建议么?

4

1 回答 1

2

如果您查看 AddFile 方法的文档,您可以传入两个参数:

  1. 文件名
  2. 存档中的目录路径。

Ionic 文档指出,对于第二个参数,规则如下:

指定用于覆盖文件名中的任何路径的目录路径。此路径可能对应于当前文件系统中的真实目录,也可能不对应。如果稍后解压缩 zip 中的文件,则这是用于解压缩文件的路径。传递 null(VB 中为 Nothing)将使用 fileName 上的路径(如果有)。传递空字符串 ("") 将在存档的根路径中插入项目。

来源(http://dotnetzip.herobo.com/DNZHelp/html/202e1fb5-8891-888f-8e91-1340f7cd80c9.htm)

The means that in your code above, where you pass in only the first parameter (file name), you will use the full path off of the file you're adding. Add the path you want to the AddFile method as your second parameter, and you're good to go.

于 2012-12-06T16:42:28.493 回答