C#文件操作一网打尽(3)——从文件任意位置开始读取

一、需求分析
我们在程序中有时候写的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;
    }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c#上位机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值