【问题标题】:Can't find ExtractToDirectory (source,path,boolean) C# VS 2019找不到 ExtractToDirectory (source,path,boolean) C# VS 2019
【发布时间】:2021-01-07 18:09:17
【问题描述】:

我正在尝试使用 ExtractToDirectory 函数,当没有文件存在时它工作正常。 (文件名不同时可以解压) 检查 microsoft 网站并查看 ExtractToDirectory 后,我发现应该显示更多 2 个重载函数。

我只能使用: (源,路径)和(源,路径,编码) 没有找到布尔值(应该显示是否允许覆盖)

【问题讨论】:

  • 您是要解压到文件夹还是现有的 zip 文件?我认为您正在尝试解压缩到 ZIP 文件而不是文件夹。在文件资源管理器中启用扩展,以便了解文件夹和 zip 文件之间的区别。
  • @OlivierRogier 是的,不知何故我不能使用这个函数(只有字符串,字符串,编码)我需要使用(字符串,字符串,布尔)但是这个函数不存在。

标签: c# zip extract unzip


【解决方案1】:

我看到 System.IO.Compression.ZipFile.ExtractToDirectory(String, String, Boolean) 方法仅在 .NET Core 2.0 之后可用,而不是 .NET Framework.NET Standard

它将在 .NET 5 上可用。

所以在 .NET Framework 上,您需要先删除现有文件夹的文件,然后再提取...或使用其他开发人员提供的另一个程序集:

using System.IO;
using System.IO.Compression;

if ( Directory.Exists(extractToPath) )
  // Ask user confirmation if needed
  Directory.Delete(extractToPath, true);

ZipFile.ExtractToDirectory(zipSourcePath, extractToPath);

System.IO.Directory.Delete()

不要忘记将项目中的引用添加到程序集System.IO.Compression.FileSystem(见下图)。

仅更新目标文件夹

使用 zip 中的新文件,您可以将 zip 解压缩到用户临时文件夹中的子文件夹中,然后将该文件夹移动到您要更新树的文件夹中。

它应该做你需要的。

string tempPath = System.IO.Path.GetTempPath();

ZipFile.ExtractToDirectory(zipSourcePath, tempPath);

以及下次使用:

Directory.Move doesn't work (file already exist)

MoveDirectory(tempPath, extractToPath);

因为Directory.Move(string, string) Method不能被使用,因为它不允许覆盖..

如果您有困难,请随时提出新问题。


【讨论】:

  • 我想到了这个想法(OpenRead,然后删除文件,如果存在并解压缩)我在 C# 中不是那么强,所以我想通过帮助我用这个函数对这些行进行编码来获得你的帮助.非常感谢
  • 谢谢。还有一个问题: if ( Directory.Exists(extractToPath) ) -> 检查 ZIP 中的文件名?毕竟我只需要 update 来自 ZIP 的新文件的功能 例如:在 UPDATE.ZIP 中有一个名为:Update.txt 和 @"." 的文本文件。 (root) 有一个名为相同 (Update.txt) 的文件我需要删除该文件,然后解压缩新的 Update.txt(如果它有效) - 如果我需要更新目录中的特定文件,此代码是否有效?例如:Update\Update.txt 会保留旧文件但只替换新文件吗?还是会删除整个文件夹“更新”?
  • 如果只需要提取一些文件来更新现有的文件系统树,我不知道。也许使用像github.com/haf/DotNetZip.Semverd 这样的另一个组件。否则,您可以在用户临时文件夹中的文件夹中提取 zip,然后通过移动文件将其合并到目标系统树中
  • 这两个想法听起来很聪明,但我真的不知道如何添加组件或如何合并文件..我以为这个功能会因为覆盖而变得如此简单,然后变得非常复杂.. 也许你可以在这里快速上传一些东西,或者通过“Discord”/“Skype”与我联系,以便我们聊天?再次非常感谢,你真的很有帮助。
  • 我想知道是否有办法使用 ZipFile.OpenRead 在整个 zip 中运行,然后使用您的代码并检查特定文件是否存在,如果是,则删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多