【问题标题】:SharpZipLib Problems Due to Zip Files with \ instead of /由于使用 \ 而不是 / 的 Zip 文件导致的 SharpZipLib 问题
【发布时间】:2011-03-14 21:28:06
【问题描述】:

我有大量的旧版拉链被错误地拉​​上。

文件保存在 zip 中,因此它们是文件夹\文件名而不是文件夹/文件名。

这意味着是这样的代码:

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 文件?

谢谢!

【问题讨论】:

    标签: c# zip sharpziplib


    【解决方案1】:

    ZipEntry 内部有一个公共函数可以为您清除名称。 “ZipEntry.CleanName(你的字符串)”。当您同时添加条目并尝试删除它时进行此调用。 注意:如果您将其用于文件路径,即使 CleanName 函数将“\”替换为“/”,它也会正确解释 zip 文件中的路径

    **

    添加 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();
    }
    

    【讨论】:

      【解决方案2】:

      看来修复位于您自己的link 的底部。其中一位开发人员写了一篇文章,其中包含一些代码,只是将\ 字符替换为/。试试这个,也许你可以从那里删除 zip 条目。

      【讨论】:

      • 该解决方案适用于 zip 文件的创建时间,而不是用于读取它。
      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多