C# dekompresja 7z (lzma)

0

Witam. Mam problem z dekompresją plików skompresowanych do formatu 7z. Pobrałem sdk skompilowałem ładnie jako dll. w programie głównym dałem referencje i zacząłem próby dekompresji. Niestety dokumentacja jest strasznie uboga, poza tym po raz pierwszy bawię się z przetwarzaniem streama.
Oto mój kod niestety rzuca wyjątkam.

                FileStream inStream = new FileStream(myFile, FileMode.Open, FileAccess.Read);
                MemoryStream outStream = new MemoryStream();
                SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
                long outSize = 0;
            try
            {
                decoder.Code(inStream, outStream, inStream.Length, outSize, null);
            }
            catch (Exception a){ MessageBox.Show(a.ToString()); }

Prosiłbym o pomoc, w internecie strasznie mało jest o tym napisane a już próbuje to zrobić 2 dni.

0

...jakim wyjątkiem?! Chłopie, a jak idziesz do lekarza i on pyta się Ciebie o objawy to mówisz mu "jestem chory"? Mechanikowi zostawiasz samochód licząc na to, że się domyśli co nie tak?

edit: tak sobie myślę patrząc na ten kod, że sądzisz, że 7z zawiera tylko jeden skompresowany stream. Otóż tak nie jest. Nie możesz sobie po prostu otworzyć pliku i liczyć na to, że trafisz na stream LZMA, bo po drodze jest trochę nagłówków, a oprócz nich są też streamy innych skompresowanych plików. Ściągnij sobie przykład z http://www.codeproject.com/Articles/27148/C-NET-Interface-for-7-Zip-Archive-DLLs, a na przyszłość trochę lepiej szukaj w sieci, bo materiałów jest niemało. Niestety po angielsku...

edit2: jest jeszcze lepiej. Do SDK, które właśnie ściągnąłem ze strony 7zipa, masz dołączony przykład (LzmaAlone). Ehh...

0

Postanowiłem skorzystać z tej biblioteki http://sevenzipsharp.codeplex.com/ stosując się do poleceń zawartych tutaj http://blog.jongallant.com/2011/10/7-zip-dll-file-does-not-exist.html

Mój kod:

            SevenZipExtractor.SetLibraryPath(@"C:\7z\7z.dll");
            SevenZipExtractor zip = new SevenZipExtractor(Application.StartupPath + "/test.7z);
            zip.ExtractArchive(Application.StartupPath + "/test");

Lecz cały czas pisze, że nie ma biblioteki 7z.dll oczywiście w folderze podanym w kodzie jest on, dodany z instalacji 7zipa która sam mam na komputerze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1