从文件中读取字节

时间:2012-11-21 16:05:43

标签: c#

我正在尝试编写霍夫曼解压缩,我有一个功能,它试图逐字节读取整个压缩文件,但我有一个问题,它只读取大约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,因为我只在那里写字节值。

4 个答案:

答案 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。