SevenZipSharp, как прочитать текстовый файл?

#c# #7zip #sevenzipsharp

#c# #7zip #sevenzipsharp

Вопрос:

Я пытаюсь прочитать текстовые файлы из архива .7z

 using (StreamReader reader = new StreamReader(f   "//"   file.FileName))
  

но я получаю эту ошибку:

Необработанное исключение типа ‘System.IO.DirectoryNotFoundException’ произошло в mscorlib.dll Дополнительная информация: Не удалось найти часть пути ‘E:1.7z123New Текст Document.txt «.

 if (IntPtr.Size == 8) //x64
            {
                SevenZip.SevenZipExtractor.SetLibraryPath(@"C:Program Files7-Zip7z.dll");
            }
            else //x86
            {
                SevenZip.SevenZipCompressor.SetLibraryPath(@"C:Program Files (x86)7-Zip7z.dll");
            }

            string f = "E://1.7z";
            SevenZipExtractor extractor = new SevenZipExtractor(f);

            foreach (ArchiveFileInfo file in extractor.ArchiveFileData)
            {
                // Console.WriteLine("{0} : {1} Bytes", file.FileName, file.Size);

                if (file.FileName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    using (StreamReader reader = new StreamReader(f   "//"   file.FileName))
                    {
                        while (reader.Peek() >= 0)
                        {
                            Console.WriteLine("{0} ", reader.ReadLine());
                        }
                    }
                }
            }
  

Комментарии:

1. вы используете неправильный путь

2. f указывает на файл, а не на папку. Вы не можете обрабатывать архивированный файл, как если бы это была папка

3. Вы используете SevenZipExtractor только для чтения имени файла, а не для извлечения чего-либо. Я не знаком с библиотекой, но это кажется неправильным.

4. используя (StreamReader reader = новый StreamReader(«C: \» file. Имя файла)) используйте это

Ответ №1:

Чтобы использовать SevenZipExtractor для извлечения файла, используйте следующее:

 String file = @"\yourdirectory\yourzipfile.zip";  
String directoryToExtract = @"\yourdirectorytoextract"
using (SevenZip.SevenZipExtractor extr = new SevenZip.SevenZipExtractor(file))
{
             Console.WriteLine("Extracting File...");
             extr.ExtractArchive(directoryToExtract);
             System.IO.File.Delete(file);   
}