当我运行程序并打开文件时,它将在控制台中打印以下文本:
File opened successfully
System.Linq.Enumerable+<TakeIterator>d__25`1[System.Byte]
第一行是正确的,但是第二行是我不理解的那一行。打算发生的事情是,它应该读取文件的前4个字节,然后将其转换为字符串以打印到控制台,以便可以看到它正确地读取了文件头。在这种情况下,预期的输出将是“ MThd”,这是文件类型标识符。
这是创建字符串的代码:
if(fileName != null)
{
byte[] fileBytes = File.ReadAllBytes(fileName);
string header = fileBytes.Take(4).ToString();
Console.WriteLine(header);
}
答案 0 :(得分:1)
如果需要文本文件,请使用ReadAllText
而不是ReadAllBytes
。
如果要读取字节流并将其解释为字符串,请使用适当的解码方法,例如
var header = System.Text.UTF8Encoding.UTF8.GetString(fileBytes.Take(4));
对于当今的多字节字符集,不再保证一定数量的字节对应于一定数量的字符。只有坚持使用ASCII编码,这才可靠。
var header = System.Text.ASCIIEncoding.ASCII.GetString(fileBytes.Take(4));
答案 1 :(得分:0)
byte []。Take()似乎返回类型
System.Linq.Enumerable+<TakeIterator>d__25``1[System.Byte]
看起来不能直接转换为字符串。
尝试遍历它,并将其组件(字符串)写入控制台。