Sharpcompress:关键字在上下文中不存在

时间:2017-07-12 09:41:28

标签: c# tar sharpcompress

我正在尝试从我的C#项目中提取.tgz文件,我尝试按照这个问题的答案:

Decompress tar files using C#

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

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文件!

谢谢

1 个答案:

答案 0 :(得分:1)

经过一个美好的夜晚,我终于能够成功。

问题1,“ExtractOptions不存在”。

正如您所看到的here,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 });
        }
    }
}