我正在尝试从我的C#项目中提取.tgz文件,我尝试按照这个问题的答案:
但是,此代码示例对我不起作用:
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文件!
谢谢
答案 0 :(得分:1)
经过一个美好的夜晚,我终于能够成功。
正如您所看到的here,ExtractOptions实际上是一个枚举,需要初始化。这在我使用的示例中没有显示(也许它在早期版本中的工作方式不同?也许在示例中使用的命名约定会让我失望?)
实际上我没有提供足够的信息来回答这个问题!问题是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 });
}
}
}