Извлечение файлов LZO1 - C # - PullRequest
       3

Извлечение файлов LZO1 - C #

0 голосов
/ 15 октября 2011

Мне было интересно, как я могу извлечь файлы с помощью C #.Я знаю, многие из вас скажут, что многие люди задавали вопросы по извлечению файлов с использованием C #, но я считаю, что формат сжатия, который я пытаюсь распаковать, - это LZO.Я не совсем уверен, как это работает, и я просмотрел некоторые классы, которые будут это делать.Кроме того, в этом файле нет волшебства LZO в верхней части файла, но я все еще уверен, что это LZO.Я думаю, что это потому, что я скачал другой инструмент, который был построен на C ++ и требует "lzo1.dll" (загрузить) .Я также буду содержать файл ниже, который я пытаюсь выяснить, как извлечь.Спасибо за любую помощь:)

Попытка извлечь: http://www.fileserve.com/file/bzV4XEz/Save0.sgd

Кроме того, эта информация, которую программа, которая может извлечь, показала мне после ее извлечения: http://pastebin.com/xmHtZagG

1 Ответ

2 голосов
/ 15 октября 2011

Этот файл lzo1.dll является общедоступной версией библиотеки декомпрессии LZO. Поскольку это работает с вашим файлом, попробуйте использовать его, особенно если библиотеки .NET LZO не работают для вас.

Кажется, он исчез из обычного места (GnuWin32), но я нашел его здесь:

http://www.pytables.org/download/lzo-win/

Как только вы это сделаете, вы можете использовать P / Invoke для вызова неуправляемых методов в библиотеке. Приведенный выше архив включает двоичные файлы, заголовочные файлы и справочные страницы - все, что вам нужно для создания собственного перевода C # P / Invoke. Простая декомпрессия не выглядит слишком сложной, всего два вызова:

[DllImport("lzo1.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int lzo_init ( );

[DllImport("lzo1.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern int lzo1x_decompress ( 
  [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] src,
  int src_len,
  [MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] byte[] dst,
  int dst_len,
  IntPtr wrkmem);

Похоже, существует множество различных методов _decompress, и вам, возможно, просто нужно попробовать их все, чтобы увидеть, какой из них работает с вашим конкретным файлом. Все они имеют одинаковую подпись, просто разные имена. Просмотрите файлы заголовков, чтобы увидеть, какие из них есть.

...