Sharpcompress: ключевые слова не существуют в контексте
Я пытаюсь извлечь файл.tgz из моего проекта на C# и попытался найти ответы на этот вопрос:
Распакуйте tar-файлы, используя 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 ответ
После спокойной ночи я наконец смог заставить это работать.
Проблема 1, "ExtractOptions не существует".
Как вы можете видеть здесь, ExtractOptions на самом деле является перечислением, которое необходимо инициализировать. Это не показано в примере, который я использовал (возможно, это работало по-другому в более ранней версии?
Проблема 2, "Файл недопустим в данном контексте"
На самом деле я не дал достаточно информации, чтобы ответить на этот вопрос! Проблема в том, что Visual Studio считал само собой разумеющимся, я пытался использовать Controller.File вместо System.IO.File (но жаловался на то, что первый не действителен в контексте, а не на возможный конфликт). Controller.File используется в среде веб-приложений 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 });
}
}
}