一、需求分析
我们在程序中有时候写的log非常的大,比如达到20MB,这时候如果使用记事本直接打开的话,在电脑性能不太好的情况下,非常的慢,那么我们能不能从文本的50%或者90%开始读取呢?如果我们从90%开始读取的话,其实只需要打开文件的后面2MB就可以了,这样我们重新生成一个只有大小为2MB的文件,打开的速度就非常快了
二、如何实现
private void readFile(string sourceFile,string DestFile,float openPostion_Percent)
{
using (FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
{
long len = fs.Length;//获取流中字节长度
float statPercent = openPostion_Percent < 1 ? openPostion_Percent : 0;//放置输入了大于1的数值,范围为0-1
long startPos = (long)(len * openPostion_Percent);//根据开始读取的百分比来计算开始读取的字节位置
fs.Seek(startPos,SeekOrigin.Begin );//设定流开始读取的位置
using (FileStream fsWrite = new FileStream(DestFile, FileMode.OpenOrCreate , FileAccess.Write ))
{
fs.CopyTo(fsWrite);//从当前流中读取字节并写入另一个流中
}
}
}
sourceFile为需要读取的源文件;
DestFile为需要重新生成的文件;
openPostion_Percent为从百分之多少开始打开,比如从百分之90开始。
private List readFile(string sourceFile, int startPost, int Length)
{
List list = new List();
using (FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
{
long len = fs.Length;//获取流中字节长度
fs.Seek(startPost, SeekOrigin.Begin);
while (true)
{
if(list.Count >= Length)
{
break;
}
int val = fs.ReadByte();
if(val!=13&& val!=10)
{
list.Add(val);
}
}
}
List<byte> endList = list.Select(item => Convert.ToByte(item)).ToList();
return endList;
}