2012-03-14 1 views
0

У меня есть программа Windows, использующая C#, которая работает с файлами журнала. Некоторые из этих файлов журналов находятся в gzipped (например, test.log.gz). У меня есть код, использующий SharpZipLib для распаковки этих файлов журналов, и он работает очень хорошо.Unzipping файл Gzip, который содержит папки в C#

public static void unZip(string gzipFilePath, string targetDir) 
{ 
    byte[] dataBuffer = new byte[4096]; 

    using (System.IO.Stream fs = new FileStream(gzipFilePath, FileMode.Open, FileAccess.Read)) 
    { 
     using (GZipInputStream gzipStream = new GZipInputStream(fs)) 
     { 
      string fnOut = Path.Combine(targetDir, Path.GetFileNameWithoutExtension(gzipFilePath)); 

      using (FileStream fsOut = File.Create(fnOut)) 
      { 
       StreamUtils.Copy(gzipStream, fsOut, dataBuffer); 
      } 
     } 
    } 
} 

Из моих исследований, казалось бы, что GZIP файлы, как правило, один файл, так что всегда, например, test.htm.gz. Поэтому я хотел бы создать файл с именем Test.htm и поместить несжатую информацию в Test.htm, что происходит в этой части коды:

using (GZipInputStream gzipStream = new GZipInputStream(fs)) 
{ 
    string fnOut = Path.Combine(targetDir, Path.GetFileNameWithoutExtension(gzipFilePath)); 

    using (FileStream fsOut = File.Create(fnOut)) 
    { 
     StreamUtils.Copy(gzipStream, fsOut, dataBuffer); 
    } 
} 

Это все хорошо, но проблема у меня есть Мне был предоставлен файл журнала, например, test.log.gz, в котором есть каталоги.

Когда я использую 7-Zip gui, чтобы разархивировать файл, для файла журнала мне нужно пять каталогов в глубине папок. Таким образом, после разархивирования с 7-Zip, она выводит:

folder1 -> folder2 -> folder3 -> folder4 -> folder5 -> test.log 

You can see how it's labeled test.log.gz. When I use the 7-zip gui to uncompress, instead of creating test.log, it creates a folder structure.

When I navigate through the folder the 7-Zip gui uncompressed, you find the test.log file buried five folders deep. From what I understand, that's not how gzip is supposed to work.

Попытка использовать метод, предоставленный из SharpLib только дает мне небольшое подмножество данных файла в тесте .журнал.

Мне не удалось найти код или проблемы с файлами gzipped, содержащими папки, и из того, что я могу сказать, вы не должны этого делать. Он должен быть в .tar, а затем gzipped.

У любого есть представление о том, что я могу сделать с этим .gz-файлом?

+2

Возможно, это не настоящий gzip-файл ... возможно, почтовый индекс с неправильным расширением? Посмотрите на первые байты в шестнадцатеричном редакторе –

+0

Спасибо за подсказку, я попробую это. – MordecaiX7

+0

Проверял первые несколько байтов в шестнадцатеричном редакторе против реального gzip-файла, и они выглядят одинаково. Вернемся к чертежной доске. – MordecaiX7

ответ

0

Первый Может попробовать использовать другую библиотеку здесь несколько

http://dotnetzip.codeplex.com/

http://www.icsharpcode.net/OpenSource/SharpZipLib/

Существует также встроенный GZ Lib встроенный в .net см

Unzipping a .gz file using C#

+0

В моем вопросе я заявляю, что уже использую SharpZipLib для успешной распакуйте обычные файлы .gz. Я мог бы попробовать один из кода, но мне действительно нужно посоветоваться с файлами .gz, которые каким-то образом содержат структуру каталогов, а не один файл. – MordecaiX7

+0

ах жаль, что я неправильно понял –

+0

может это поможет? http://www.codeproject.com/Articles/23010/Compress-Folders-with-C-and-the-SharpZipLib –

0

Существует еще один файл, поэтому нет никакого нарушения формата gzip. gzip разрешает хранить все имя пути вместе с файлом, поэтому путь может быть просто ghostcache/ic_split_files/CBN/00-christmas/test.log и 7-Zip верно воссоздает этот путь. Вы должны уметь это видеть в заголовке gzip, начиная примерно с десяти байтов.

Тот факт, что вы возвращаете только подмножество журнала, может быть или не быть связано с именем пути в файле gzip.

Укажите шестнадцатеричный дамп первых 64 байтов файла .gz, который работал, и файл .gz, который этого не сделал.

+0

Обновлен вопрос о предоставлении первых 64 байтов данных в рабочих и нерабочих файлах .gz. (Надеюсь, это то, что вы искали) – MordecaiX7

+0

Um, no. Я попросил гексагональные свалки. –

+0

Мне нужно google .. Я не знаком с этим. Использование Hex Workshop для просмотра файлов. – MordecaiX7

Смежные вопросы