C# Как получить файл/копировать файл из файла bzip2 (.bz2) без извлечения файла

У меня есть сжатый файл .bz2, и я хочу скопировать внутренний файл в другое место, не распаковывая его. Я использую .net 4.5 с С#.

я пробовал так, но это для zip-файлов (.zip):

using (var zip = ZipFile.Read(_targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".bz2"))
{
    Stream s = zip[file[0].ToUpper() + "_" + file[1].ToUpper()].OpenReader();
    // fiddle with stream here

    using (var fileStream = File.Create(_targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".HDC"))
    {
        s.Seek(0, SeekOrigin.Begin);
        s.CopyTo(fileStream);
    }
}

Или сожмите файл алгоритмом bzip2 и дайте ему расширение .HDC.


person Tommek    schedule 09.06.2015    source источник
comment
Поскольку это сжатый файл, маловероятно, что из него можно что-то извлечь без предварительной распаковки. Возможно, это помогает.   -  person Melvin    schedule 09.06.2015
comment
если открывать вручную с помощью winrar и копировать файл оттуда, он тоже не распаковывается или нет?   -  person Tommek    schedule 09.06.2015


Ответы (1)


Я думаю, что решил это так, по крайней мере, файл, который у меня есть с этим методом, такой же, как когда я копирую файл из winrar.

var fname = _targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".bz2";
using (var fs = File.OpenRead(fname))
{
    using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs))
    {
        var outFname = _targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".HDC";
        using (var output = File.Create(outFname))
        {
            var buffer = new byte[2048];
            int n;
            while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, n);
            }
        }
    }
}
person Tommek    schedule 09.06.2015