我正在尝试编写霍夫曼解压缩,我有一个功能,它试图逐字节读取整个压缩文件,但我有一个问题,它只读取大约150个第一个字节,其余的被跳过我无法理解为什么。< / p>
这是功能:
public static StringBuilder odczytBajtowy(string nazwa)
{
FileStream plik = null;
StringBuilder dane = new StringBuilder("");
try
{
plik = new FileStream(@nazwa, FileMode.Open, FileAccess.Read);
int w;
int n = 0;
do
{
n++;
w = plik.ReadByte();
if (w != -1)
dane.Append(StringHelp.Reverse(Convert.ToString((byte)w,2).PadLeft(8, '0')));
}
while ((w > 0));
}
catch (FileNotFoundException)
{
Console.WriteLine("Brak pliku {0}", nazwa);
}
finally
{
if (plik != null)
{
plik.Close();
}
}
return dane;
}
看起来该函数在文件真正结束之前读取EOF。我知道字节之间没有EOF,因为我只在那里写字节值。
答案 0 :(得分:3)
你的while条件不正确:它应该读while (w != -1)
,所以你一找到零字节就停止循环读取字节,而不是在文件结尾处。
答案 1 :(得分:2)
while ((w > 0));
当它达到0时停止。将其更改为
while ((w >= 0));
答案 2 :(得分:2)
你可能正在击中零字节。
将while循环更改为包含0:
while ((w >= 0));
答案 3 :(得分:1)
问题出在这一行:
while((w> 0));
应该是:
while((w!= -1));
因为你的文件中可能有一个0。