0

我正在尝试从我的 C# 项目中提取 .tgz 文件,并尝试遵循此问题的答案:

使用 C# 解压缩 tar 文件

但是,此代码示例对我不起作用:

using (Stream stream = File.OpenRead(tarPath))
{
    var reader = ReaderFactory.Open(stream);
    while (reader.MoveToNextEntry())
    {
        if (!reader.Entry.IsDirectory)
        {
            reader.WriteEntryToDirectory(extractPath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
        }
    }
}

我收到两个错误:

1) ExtractOptions“在当前上下文中不存在”。我成功地使用了 System.IO 和 SharpCompress.Readers,但我找不到 ExtractOptions 的位置。

2)文件“是一种方法,在给定的上下文中无效”。我不知道为什么会这样!

如果有帮助,我可以通过简单的方法成功地从同一路径中提取 .zip 文件:

System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath);

如果有更好的方法来提取 .tgz 文件也会有所帮助!

谢谢

4

1 回答 1

2

经过一个美好的夜晚,我终于能够让它工作。

问题 1,“ExtractOptions 不存在”。

正如您在此处看到的,ExtractOptions 实际上是一个枚举,需要对其进行初始化。这在我使用的示例中没有显示(也许它在早期版本中的工作方式不同?也许示例中使用的命名约定让我失望了?)

问题 2,“文件在给定的上下文中无效”

其实我没有提供足够的信息来回答这个问题!问题是 Visual Studio 认为我想使用 Controller.File 而不是 System.IO.File 是理所当然的(但抱怨第一个在上下文中无效,而不是可能的冲突)。Controller.File 在 Web 应用程序框架 ASP.NET MVC(这是我正在研究的)中用于创建 FileContentResult 对象。

固定代码

(使用 System.IO;使用 SharpCompress.Readers;)

using (Stream stream = System.IO.File.OpenRead(tarPath))
{
    var reader = ReaderFactory.Open(stream);
    while (reader.MoveToNextEntry())
    {
        if (!reader.Entry.IsDirectory)
        {
           reader.WriteEntryToDirectory(extractPath, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
        }
    }
}
于 2017-07-13T08:00:48.533 回答