C#/C++ 文件中插入数据和文件后添加数据的几种方法

文件中插入数据:


      先说思路: 

             小文件:   1.建立byte型数组或者list   (新手推荐使用list,C#中能直接使用Insert方法进行数据插入。)

                               List<byte> dataBuf = new List<byte>();

                            2.FileStream sw = new FileStream(mfilename,  FileMode.Open, FileAccess.ReadWrite);

                            3.遍历读取并找到符合条件的索引位置   

                            4.在步骤1数组中从后往前对索引地址插入数据

                            5.sw.Position = 0;  //写入位置回到文件开头

                            6.sw.Write(dataBuf.ToArray(), 0 ,dataBuf.Count)  //此时文件数据长度需要按照内存中数组的长度来

            

               代码

            try
            {
                FileStream mFileRead = new FileStream(mfilename, FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite);
                
                List<long> seekPosition  = new List<long>();    //存放所有0xC0的首位置  索引值以0位首位置
                List<byte> fileBuf = new List<byte>();            //存放文件

                
                /*****遍历查找0xC0位置****/
                mFileRead.Seek(0, SeekOrigin.Begin);            //设置索引首位置
                int lastByte = 0;   
                while (mFileRead.Position < mFileRead.Length)   //读到最后一个
                {
                    fileBuf.Add((byte)mFileRead.ReadByte());
                    if (fileBuf.ElementAt((fileBuf.Count-1)) == '0' && lastByte == 'C')   // 找到 0xC0   'C' 的位置
                    {
                        seekPosition.Add((long)(mFileRead.Position-2));
                       
                    }
                    lastByte = fileBuf.ElementAt((fileBuf.Count - 1));
                }

                /*******遍历增加回车行*******/
                int i = seekPosition.Count - 1;              //TODO:要从后往前添加 否则索引错误
                byte[] NEXTLINE = new byte[2]{0x0d,0x0a};
                while (i>0) 
                {
                    if ((seekPosition.ElementAt(i) - seekPosition.ElementAt(i -1)) == 5) 
                    {
                        lbLOG.Items.Add("0xC0 Nend Add Position =" + seekPosition.ElementAt(i) + "\n");
                        fileBuf.Insert((int)(seekPosition.ElementAt(i-1) + 3), NEXTLINE[0]);
                        fileBuf.Insert((int)(seekPosition.ElementAt(i-1) + 4), NEXTLINE[1]);
                    }
                    i--;
                }
                fileBuf.Insert(0, NEXTLINE[0]);    //前置回车行
                fileBuf.Insert(0, NEXTLINE[1]);
                mFileRead.Position = 0;
                mFileRead.Write(fileBuf.ToArray(), 0, fileBuf.Count);
                mFileRead.Flush();                //写入文件 清除缓冲区
                mFileRead.Close();                //关闭文件
            }
            catch (IOException e) 
            {
                Console.WriteLine("Warnning " +e.ToString() + "\n");
            }
              实现的功能:  查找 0xC0位置  , 在 0xC0 0xC0中间添加换行


            大文件(500m以上):

                         思路:  1.同目录下新建空白文件

                                    2.同小文件将数据读入内存

                                    3.修改内存中的数据

                                    4.数据保存到新文件中

                                    5.利用File类删除旧文件,FineInfo类修改文件名




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值