代码如下:
protected string GetText(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
string result;
if ((fs.Length - Length) < page)
{
if (fs.Length - Length > 0)
{
fs.Position = fs.Length - Length;
}
else
{
fs.Position = 0;
fs.Close();
StreamReader sr1 = new StreamReader(path, Encoding.GetEncoding("GBK"));
result= sr1.ReadToEnd();
sr1.Close();
return result;
}
}
else
{
fs.Position = page;
}
byte[] buffer = new byte[Length];
fs.Read(buffer, 0, Length);
page = fs.Position;
StreamReader sr = new StreamReader(new MemoryStream(buffer), Encoding.GetEncoding("GBK"));
result=sr.ReadToEnd();
sr.Close();
fs.Close();
return result.Trim();
}当从开头截取了后,以后每次继续继续截取出来的内容开头都有乱码,直到遇到下一行才开始正确显示。有时候一行很长,故不能一行一行地截取。不知道有什么优化的方法?
protected string GetText(string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
string result;
if ((fs.Length - Length) < page)
{
if (fs.Length - Length > 0)
{
fs.Position = fs.Length - Length;
}
else
{
fs.Position = 0;
fs.Close();
StreamReader sr1 = new StreamReader(path, Encoding.GetEncoding("GBK"));
result= sr1.ReadToEnd();
sr1.Close();
return result;
}
}
else
{
fs.Position = page;
}
byte[] buffer = new byte[Length];
fs.Read(buffer, 0, Length);
page = fs.Position;
StreamReader sr = new StreamReader(new MemoryStream(buffer), Encoding.GetEncoding("GBK"));
result=sr.ReadToEnd();
sr.Close();
fs.Close();
return result.Trim();
}当从开头截取了后,以后每次继续继续截取出来的内容开头都有乱码,直到遇到下一行才开始正确显示。有时候一行很长,故不能一行一行地截取。不知道有什么优化的方法?
result= sr1.ReadToEnd这不就完事了么?
因为ANSI编码(该文本文件使用ANSI编码)用不同的字节长度表示字母和汉字。如果要准确读取文本文件中的内容,我只知道从开头开始逐个判读是否是汉字还是字母。如果通过文件读取位置直接跳转,就不能判读接下来读取的是汉字还是字母,因为有可能跳到一个汉字编码中间去。你可以根据以上代码编写一个程序测试一下就知道了。
PS:同样是ANSI编码的文本文件,如果能够确定文件指针位置接下来是一个字符或者汉字编码的开始,如果要向前回溯,即判读前一个是字符还是汉字,是不是不可能?
{
//汉字
}if ( '懒' >= '\u4e00' && '懒' <= '\u9fa5' )
{
//汉字
}剩下的自己算...
我也是差不多这样做,当对于5楼提到的向后跳很多个单位的问题,就需要运行很久,而且cpu占用很高
{
while (true)
{
//此处执行操作. Thread.Sleep(1); //累了, 休息一下...
}
}Thread T = new Thread(new ThreadStart(Dowork));T.IsBackground = true;T.Start();^o^