undefined您可以查看此项目:WinDataInspector基础上,代码如下://this.Stream是你插入数据的流{longposition=this.Stream.Position;长长度=this.Stream.Length;MemoryStreamms=newMemoryStream();这个.Stream.Position=0;DIUtils.CopyStream(this.Stream,ms,position,progressCallback);ms.Write(数据,0,数据长度);this.Stream.Position=位置;DIUtils.CopyStream(this.Stream,ms,this.Stream.Length-position,progressCallback);这个.Stream=ms;}#regionDelegatespublicdelegatevoidProgressCallback(longposition,longtotal);#endregionDIUtils.cspublicstaticvoidCopyStream(Streaminput,Streamoutput,longlength,DataInspector.ProgressCallbackcallback){longtotalsize=input.Length;长字节写入=0;常数int大小=32768;byte[]buffer=newbyte[size];诠释阅读;intreadlen=length0&&(read=input.Read(buffer,0,readlen))>0){output.Write(buffer,0,read);字节写入+=读取;长度-=读取;readlen=length根据项目的范围,您可能希望决定将每一行文本与文件一起插入到类似于数据库表的表数据结构中,以便可以将其插入到特定位置在任何给定时刻,无需每次导入、修改和导出整个文本文件时都阅读它。这是因为您提供的数据是“巨大的”。您仍然可以重新创建该文件,但至少您可以通过这种方式创建可扩展的解决方案。这可能是“可能的”,具体取决于文件系统如何存储文件以在中间快速插入(即添加额外的)字节。如果可以远程实现,一次只能完成一个完整的块,并且只能通过对文件系统本身进行低级修改或使用特定于文件系统的接口来完成。文件系统通常不是为此操作而设计的。如果你需要快速插入,你真的需要一个更通用的数据库。根据您的应用程序,中间地带将您的插入分组在一起,因此您只需重写一次而不是二十次。如果您知道写入新数据的特定位置,请使用BinaryWriter类:byte[]byteNewData=newbyte[strNewData.Length];//将字符串内容复制到字节数组for(vari=0;i你总是要重写插入点的剩余字节。如果这个点是0,那么你将重写整个文件。如果是10个字节在最后一个字节之前,那么你将重写最后10个字节。在任何情况下都没有直接支持“插入文件”。但是下面的代码正是这样做的。varsw=new秒表();varab="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//创建varfs=newFileStream(@"d:test.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare2Read6Oonep.File4,);sw.重启();fs.Seek(0,SeekOrigin.Begin);for(vari=0;i为了获得更好的文件IO性能,请在上面的代码中使用“神奇的两个有效数字”。文件的创建使用262144字节(256KB)的缓冲区,这根本没有帮助。如果运行代码,您可以通过StopWatch结果看到用于插入的相同缓冲区“性能作业”。我的PC上的测试草稿给出以下结果:13628.8ms用于创建,3597.0971ms用于插入。请注意目标字节forinsert是10,这意味着几乎整个文件都被重写了。为什么它不把指针放在文件的末尾(字面意思是,比文件当前大小高4个字节)然后,在末尾文件中写的是插入数据的长度,最后是要插入的数据本身。比如文件中间有一个字符串,要在字符串中间插入几个字符,你可以在字符串中的四个字符上写一个指向文件末尾的指针,然后写最后四个字符和你要先插入的字符。这都是关于订购数据的。当然,你只能自己写整个文件才能做到这一点,我的意思是你没有使用其他编解码器。以上是C#学习教程:如何使用C#将字符插入文件的全部内容,如果是,请分享对大家有用并且需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
