FileStream每隔一个字符返回空字符

时间:2013-01-07 21:08:39

标签: c# text file-io filestream

我似乎在C#中遇到了一些文件流问题。 我试图读取由MSI安装程序生成的非常大的文本文件10mb的最后一行。

我使用的代码是:

string path = @"C:\uninstall.log";
byte[] buffer = new byte[100];

using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    long len = fs.Length;

    fs.Seek(-100, SeekOrigin.End);

    fs.Read(buffer, 0, 100);
}

string foo = Encoding.UTF8.GetString(buffer);
Console.WriteLine("\"" + foo + "\"");

但输出看起来与此相似:

H E L L O   W O R L D ! ! ! B L A H   B L A H

显然,读取的流包含每个其他字符的'\ 0'(空)字符。 有谁知道造成这种情况的原因是什么?

3 个答案:

答案 0 :(得分:7)

该文件可能是UTF-16文件,而不是UTF-8文件。只需尝试使用Encoding.Unicode代替Encoding.UTF8

答案 1 :(得分:7)

请改用Encoding.UnicodeEncoding。您的文件采用UTF-16编码,而不是UTF-8。

答案 2 :(得分:3)

听起来这个文件实际上是UTF-16编码的。在GetString()中更改UTF-8。