【问题标题】:C# How to get file/ copy file from a bzip2 (.bz2) file without extracting the fileC# 如何从 bzip2 (.bz2) 文件中获取文件/复制文件而不提取文件
【发布时间】:2015-08-23 22:37:15
【问题描述】:

我有一个 .bz2 压缩文件,我想将里面的文件复制到另一个位置,而不是解压缩它。 我使用 .net 4.5 和 C#。

我试过这样,但这是用于 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。

【问题讨论】:

  • 由于它是一个压缩文件,如果不先进行分解,似乎不太可能从中提取任何内容。也许this 有帮助。
  • 如果你用winrar手动打开并从那里复制文件,它也没有解压,或者是吗?

标签: c# copy compression bzip2 sharpziplib


【解决方案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);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多