任何人都可以发现错误,为什么它每次都给我错误的值,而不是正确的值?
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;
}
我认为问题在于 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;
}