FileStream fs = File.Open(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "file/file.txt"), FileMode.Open); StreamReader reader = new StreamReader(fs); string line; while ((line = reader.ReadLine()) != null) { Console.Write(line); }
程序如下,结果如下:
问题找到了,StreamReader读取的内容是正常的。
问题出在Console.write方法上,用此方法输出后内容就变了
原理上来讲应该是一致的,
可能出现的问题应该是不可见字符或者文件编码导致的
我试过,编码都弄成utf-8,内容还是不一样。后来换成汉字又可以。估计是有些不可见字条导致的
程序显示的是正确的,比如你新建一个txt输入一个“要”字保存,再用记事本打开看就是乱码了,原因就是记事本把前面几个字节当作它的文件头截取了,导致显示不正确。
你说的bom?怎么避免?
reader.readend这个方法试试,还有可以提供一个编码类型给
StreamReader
试过了,木有用
Console.write方法没有错,我给你解释下这行代码的意思:line = reader.ReadLine(),将输入流的字节按照默认编码方式转换为UNICODE字符串。
所以,如果出错,也应该是 reader.ReadLine() 的问题。
StreamReader reader = new StreamReader(fs,Encoding.GetEncoding("gb2312"));
你可以尝试修改 Encoding 来测试你的 txt 用哪种字符编码能够正确读取文件内容。
我的文件编码方式是utf8,读的时候也指定了utf8。读的时候断点看了内容是一致的,但用Console.writeLine方法输出到控制台后发现少了几行内容。
@tudas: 你用的 Console.Write(line); 这个会追加,不会自动换行,但是Console窗口会自动换行显示,同时Console还会限制输出行的个数。
你用 Console.writeLine 的时候,你可以设置一个短信,每写一行,你就去控制台窗口看下。
你还可以用System.Diagnostics.Debug.WriteLine在“输出”窗口观察输出内容。