我正在使用以下代码,使用SharpZipLib库将文件添加到.zip文件中,但每个文件都以其完整路径存储.我只需要将文件存储在.zip文件的"root"中.
string[] files = Directory.GetFiles(folderPath); using (ZipFile zipFile = ZipFile.Create(zipFilePath)) { zipFile.BeginUpdate(); foreach (string file in files) { zipFile.Add(file); } zipFile.CommitUpdate(); }
在提供的文档中,我找不到任何关于此选项的信息.由于这是一个非常受欢迎的图书馆,我希望有人读这篇文章可能会有所了解.
我的解决办法是设定NameTransform
的对象属性ZipFile
到ZipNameTransform
其TrimPrefix
设置为文件的目录.这会导致删除条目名称的目录部分,即完整文件路径.
public static void ZipFolderContents(string folderPath, string zipFilePath) { string[] files = Directory.GetFiles(folderPath); using (ZipFile zipFile = ZipFile.Create(zipFilePath)) { zipFile.NameTransform = new ZipNameTransform(folderPath); foreach (string file in files) { zipFile.BeginUpdate(); zipFile.Add(file); zipFile.CommitUpdate(); } } }
NameTransform属性的类型很酷INameTransform
,允许自定义名称转换.
如何使用System.IO.Path.GetFileName()结合ZipFile.Add()的entryName参数?
string[] files = Directory.GetFiles(folderPath); using (ZipFile zipFile = ZipFile.Create(zipFilePath)) { zipFile.BeginUpdate(); foreach (string file in files) { zipFile.Add(file, System.IO.Path.GetFileName(file)); } zipFile.CommitUpdate(); }