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 });
        }
    }
}
Другие вопросы по тегам