压缩文件,不包含文件夹

时间:2018-11-27 16:40:40

标签: c# zip system.io.compression

我正在使用System.IO.Compression来将文件压缩为.zip,在源代码下方:

using (FileStream zipToOpen = new FileStream(zipName, FileMode.CreateNew)){
  using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update)){
    ZipArchiveEntry readmeEntry = archive.CreateEntry(@"C:\Users\soc\myFold\someFile.xml");
  }
}

这段代码很好用,但是不幸的是,在.zip中有整个文件夹序列(C:-> Users-> ...-> someFile.xml);可以仅使用所需文件获取最终的.zip文件?我知道使用其他库可以实现这一事实(DotNetZip add files without creating folders),但是我想知道是否可以对标准库进行同样的操作。

1 个答案:

答案 0 :(得分:0)

似乎给人的印象是文件将被添加到档案中,事实并非如此。 CreateEntry仅使用指定的路径和条目名称创建一个条目,您仍然需要写入实际文件。
实际上,您问题中的代码与文档中的代码非常相似,所以我认为您是从那里得到的?

无论如何,要获取文件名,您可以使用Path.GetFileName,然后可以将实际文件内容写入zip条目。

var filePath = @"C:\temp\foo.txt";
var zipName = @"C:\temp\foo.zip";

using (FileStream zipToOpen = new FileStream(zipName, FileMode.CreateNew))
{
    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
    {
        ZipArchiveEntry readmeEntry = archive.CreateEntry(Path.GetFileName(filePath));
        using (StreamReader reader = new StreamReader(filePath))
        using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
        {
            writer.Write(reader.ReadToEnd());
        }
    }
}

上面的代码将创建一个归档文件,其根目录为foo.txt,源文件的内容为该目录,没有任何其他目录。