2

I use the following code to create a zip file:

var files = Directory.GetFiles(targetPath);
var zip = ZipFile.Create(targetPath + "/myzip.zip");
zip.BeginUpdate();
foreach (var file in files) zip.Add(file, CompressionMethod.Deflated);
zip.CommitUpdate();
zip.Close();

I get the following structure of archive:

myzip.zip
   - Folder1
      - Folder2
        - File1.txt
        - File2.txt
        - File3.txt

But I need:

myzip.zip
  - File1.txt
  - File2.txt
  - File3.txt

Help please.

4

1 に答える 1

6

SharpZipLib コードを見ると、ZipFile クラスに次のメソッドがあります。

public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)

ファイルから IStaticDataSource を取得し、適切な entryName (ディレクトリ パスを含まない) を作成するだけです。つまり、最後のディレクトリ区切り文字Path.DirectorySeparatorChar フィールドfile文字列で検索し、その後はファイル名にする必要があります。

[編集] 明確化: 私は最初に提案しAdd(string file, string entryName)ましたが、OP が呼び出しで compressionMethod を指定していることを確認したときに、上記の方法に編集しました。ただし、新しい zip エントリのデフォルトの compressionMethod は CompressionMethod.Deflated であるため、このAdd(string file, string entryName)メソッドを使用すると、IStaticDataSource を取得しなくても同じ結果が得られます。

于 2011-02-07T17:48:44.670 に答える