我使用以下代码创建一个zip文件:
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();
我得到以下存档结构:
myzip.zip
- Folder1
- Folder2
- File1.txt
- File2.txt
- File3.txt
但我需要:
myzip.zip
- File1.txt
- File2.txt
- File3.txt
请帮助。
答案 0 :(得分:6)
查看SharpZipLib代码,ZipFile类中有这个方法似乎可以做你想要的:
public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod)
您只需从文件中获取IStaticDataSource,并创建相应的entryName(不包括目录路径),即在file
字符串中搜索最后一个目录分隔符Path.DirectorySeparatorChar Field,之后的任何事情应该只是你的文件名。
[编辑]澄清:我最初建议Add(string file, string entryName)
,但当我看到OP在调用中指定了compressionMethod时,编辑了上述方法。但是新zip压缩条目的默认compressionMethod是CompressionMethod.Deflated,因此使用Add(string file, string entryName)
方法应该得到相同的结果,而不必获得IStaticDataSource。