2

我正在尝试编写 huffman 解压缩,我有一个函数试图逐字节读取整个压缩文件,但我有一个问题,它只读取大约 150 个第一个字节,其余的被跳过我不明白为什么。

这是功能:

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,因为我在那里只写字节值。

4

4 回答 4

3

您的 while 条件不正确:它应该 read while (w != -1),因此一旦找到零字节,您就停止循环读取字节,而不是在文件末尾。

于 2012-11-21T16:07:24.613 回答
2
while ((w > 0));

这将在达到 0 时停止。将其更改为

while ((w >= 0));
于 2012-11-21T16:08:25.050 回答
2

您可能遇到了零字节。

更改您的 while 循环以包含 0:

while ((w >= 0));
于 2012-11-21T16:09:26.930 回答
1

问题出在这一行:

而 ((w > 0));

它应该是:

而 ((w != -1));

因为很可能您的文件中包含 0。

于 2012-11-21T16:10:50.667 回答