在不应该使用时在zip中使用ICSharpCode.SharpZipLib.Zip子文件夹



我正在使用库ICSharpCode.SharpZipLib.Zip ;

我的代码如下:

  • 路径是根。 \ALAWP\THIS\ACORD\
  • 我正在把它们拉到ZIPDirectory

但是,当它完成时,文件不被命名为acord_combined.txt,而是被称为ACORDacord_combined.txt

我做错了什么?

public void CleanRoot()
{
    DirectoryInfo RootDi = new DirectoryInfo(FilePrep.RootDirectory);
    string ZipDirectory = FilePrep.RootDirectory + "\processed\AceKey"+ DateTime.Now.ToString("yyyyMMdd_H;mm;ss") +".zip";
    ZipOutputStream NewZipOutput = new ZipOutputStream(File.Create(ZipDirectory));
    foreach (FileInfo fi in RootDi.GetFiles("acord*.*"))
    {
        Compress(ref NewZipOutput, fi);
        //MoveFile(fi.FullName,ZipDirectory);
    }
    NewZipOutput.Finish();
    NewZipOutput.Close();
}
public void Compress(ref ZipOutputStream ZipFolder, FileInfo fi)
{
    try
    {
       FileStream fsFileToBeZipped = fi.OpenRead();
       ZipEntry entry = new ZipEntry(fi.FullName);
       ZipFolder.PutNextEntry(entry);
       int size = 2048;
       byte[] buffer = new byte[size];
       while (true)
       {
          size = fsFileToBeZipped.Read(buffer, 0, buffer.Length);
          if (size > 0)
             ZipFolder.Write(buffer, 0, size);
          else
             break;
       }   //end while ( true )
       fsFileToBeZipped.Close();
       //prepare and delete file
       fi.Attributes = FileAttributes.Normal;
       //fi.Delete();
   }   //end try
   catch (Exception e)
   {
        Console.WriteLine("Error zipping File.  Error - " + e.Message);
   }   //end catch
}

你的问题就在这里

new ZipEntry(fi.FullName);

zipEntry 的参数是 zip 文件中的路径,而不是压缩数据来自的完整路径。 通常zip库,如7zip和SharpZip,会公开一种创建"入口路径"的方法,但写入zip的实际数据来自完整路径。

可能你想要的是

 new ZipEntry(Path.GetFileName(fi.fullName))

最新更新