我正在使用以下代码,使用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();
}
我在提供的文档中找不到任何关于此选项的内容。由于这是一个非常受欢迎的图书馆,我希望有人读这篇文章可能会有所了解。
答案 0 :(得分:22)
我的解决方案是将NameTransform
的{{1}}对象属性设置为ZipFile
,并将ZipNameTransform
设置为文件目录。这会导致条目名称的目录部分(完整文件路径)被删除。
TrimPrefix
NameTransform属性的类型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();
}
}
}
很酷,允许自定义名称转换。
答案 1 :(得分:11)
如何将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();
}
答案 2 :(得分:4)
Directory.GetFiles()
的MSDN条目指出返回的文件名附加到提供的路径参数。(http://msdn.microsoft.com/en-us/library/07wt70x2.aspx),因此传递给{{的字符串1}}包含路径。
根据SharpZipLib文档,Add方法存在重载,
zipFile.Add()
尝试这种方法:
public void Add(string fileName, string entryName)
Parameters:
fileName(String) The name of the file to add.
entryName (String) The name to use for the ZipEntry on the Zip file created.