我有一大堆未经正确压缩的Legacy拉链。
文件保存在zip中,因此它们是文件夹\ filename而不是文件夹/文件名。
这意味着代码是这样的:
using (ZipFile zipFile = new ZipFile(@"zippath.zip"))
{
for (int i = 0; i < zipFile.Count; i++)
{
var entry = zipFile[i];
zipFile.BeginUpdate();
zipFile.Delete(entry);
zipFile.CommitUpdate();
...
投掷
找不到要删除的条目
这是一个已知问题here,但遗憾的是我无法控制拉链的制作方式,而且我需要使用多年的zip文件。有没有办法可以在使用之前修复删除语句或修复(在C#中)zip文件?
谢谢!
答案 0 :(得分:2)
ZipEntry中有一个公共功能可以为您清除名称。 “ZipEntry.CleanName(yourstring)”。当您同时添加条目并尝试删除它时,请拨打此电话。 注意:如果您将其用于文件路径,它将在zip文件中正确解释路径,即使CleanName函数将“\”替换为“/”
**
添加ZIPENTRY
**
zipEntryKey = file.FullName.Replace(file.Directory.Root.ToString(), string.Empty);
zipEntryKey = ZipEntry.CleanName(zipEntryKey);
ZipEntry entry = new ZipEntry(zipEntryKey);
entry.DateTime = file.LastWriteTime;
Stream fileStream = Minify(file);
byte[] buffer = new byte[fileStream.Length];
entry.Size = fileStream.Length;
fileStream.Read(buffer, 0, buffer.Length);
fileStream.Close();
zipStream.PutNextEntry(entry);
zipStream.Write(buffer, 0, buffer.Length);
zipStream.CloseEntry();
删除ZIPENTRY
zipEntryKey = file.FullName.Replace(file.Directory.Root.ToString(), string.Empty);
zipEntryKey = ZipEntry.CleanName(zipEntryKey);
if (existingZip.FindEntry(zipEntryKey, true) > -1)
{
existingZip.BeginUpdate();
ZipEntry Existing = existingZip[existingZip.FindEntry(zipEntryKey, true)];
existingZip.Delete(Existing);
existingZip.CommitUpdate();
}
答案 1 :(得分:0)
该修补程序似乎位于您自己link的底部。其中一位开发人员撰写了一篇文章,其中包含一些代码,只是将\
字符替换为/
。试试这个,也许从那里你可以删除zip条目。