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 のドキュメントを見ると、渡すことができる 2 つのパラメーターがあります。

  1. ファイル名
  2. アーカイブ内のディレクトリ パス。

Ionic のドキュメントには、その 2 番目のパラメーターのルールは次のように記載されています。

fileName 内の任意のパスをオーバーライドするために使用するディレクトリ パスを指定します。このパスは、現在のファイルシステムの実際のディレクトリに対応している場合と、対応していない場合があります。zip 内のファイルが後で抽出される場合、これは抽出されたファイルに使用されるパスです。null (VB では Nothing) を渡すと、fileName のパスがあればそれが使用されます。空の文字列 ("") を渡すと、アーカイブ内のルート パスにアイテムが挿入されます。

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

これは、最初のパラメーター (ファイル名) のみを渡す上記のコードでは、追加するファイルの完全なパスを使用することを意味します。必要なパスを AddFile メソッドに 2 番目のパラメーターとして追加すれば、準備完了です。

于 2012-12-06T16:42:28.493 に答える