C# 不包含文件夹的Zip文件

C# 不包含文件夹的Zip文件,c#,zip,system.io.compression,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.CreateE

我使用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);我可以获得一个只有我需要的文件的final.zip吗?我知道,对于其他库,这一事实是可能的(),但我想知道是否有可能对标准库执行同样的操作。

您似乎有这样的印象,即文件将被添加到存档中,但事实并非如此。仅创建具有指定路径和条目名称的条目,您仍然需要写入实际文件。
事实上,你问题中的代码与文档中的代码非常相似,所以我假设你是从那里得到的

无论如何,只获取您可以使用的文件名,然后您可以将实际的文件内容写入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
和源文件内容的存档,无需任何其他目录。

非常感谢@Stijn!你说得对,因为这是我第一次需要这个库,所以我复制了这个例子……它工作得非常好!