在c#中解压缩并获取文件大小(bzip2)

问题描述 投票:0回答:1

任何人都可以发现错误,为什么它每次都给我错误的值,而不是正确的值?

private long Main(string bzip2FilePath)
{
    long totalUncompressedSize = 0;

    try
    {
        
        var compressedDataByteArray = File.ReadAllBytes(bzip2FilePath);

       
        using (var mstream = new MemoryStream(compressedDataByteArray))
        
        using (var unzipstream = new BZip2InputStream(mstream))
       
        using (var reader = new StreamReader(unzipstream))
        {
       
            char[] buffer = new char[4096];
            int bytesRead; 
            while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                totalUncompressedSize += bytesRead;
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Error calculating BZip2 uncompressed size: {ex.Message}");
    }

    return totalUncompressedSize;
}
c# .net 7zip bzip
1个回答
0
投票

我认为问题在于 StreamReader 读取字符,而不是字节,因此由于编码中的转换,大小计算可能是错误的。相反,您需要使用 BinaryReader 并读取字节。

我可以建议你可以使用这个:

using (var reader = new BinaryReader(unzipstream))

而不是这个:使用 (var reader = new StreamReader(unzipstream))

因此,您可能还想更新代码中的关联类型:如下所示:

byte[] buffer = new byte[4096];

和 while 循环:

while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
        {
            totalUncompressedSize += bytesRead;
        }
© www.soinside.com 2019 - 2024. All rights reserved.