4

我似乎对 C# 中的 Filestream 有一些问题。我正在尝试从 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”(空)字符。有谁知道是什么原因造成的?

4

3 回答 3

7

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

于 2013-01-07T21:10:19.413 回答
7

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

于 2013-01-07T21:11:46.923 回答
3

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

于 2013-01-07T21:15:55.447 回答