首页 / 知识
关于 .net:如何使用 C# 向文件中插入字符
2023-04-17 12:07:00

How to insert characters to a file using C#我有一个巨大的文件,我必须在其中的特定位置插入某些字符。在 C# 中不重新重写整个文件的最简单方法是什么。 文件系统不支持在文件中间"插入"数据。如果您确实需要可以以某种方式写入的文件,我建议您考虑使用嵌入式数据库。 您可能想看看 SQLite 或 BerkeleyDB。 然后,您可能正在使用文本文件或旧的二进制文件。在这种情况下,您唯一的选择是重写文件,至少从插入点到结尾。 我会看看 FileStream 类在 C# 中执行随机 I/O。 您可能需要从插入更改的位置到最后重写文件。您最好始终写入文件末尾并使用诸如排序和 grep 之类的工具以所需的顺序获取数据。我假设您在这里谈论的是文本文件,而不是二进制文件。 没有办法在不重写字符的情况下将字符插入文件。使用 C# 可以使用任何 Stream 类来完成。如果文件很大,我建议您在 C# 代码中使用 GNU Core Utils。他们是最快的。我曾经使用核心工具(大小为 4GB、8GB 或更多等)处理非常大的文本文件。 head、tail、split、csplit、cat、shuf、shred、uniq 等命令在文本操作中确实有很大帮助。 例如,如果您需要将一些字符放入一个 2GB 的文件中,您可以使用 split -b BYTECOUNT,将输出放入文件中,将新文本附加到其中,然后获取其余内容并添加到它。这应该比任何其他方式都快。 希望它有效。试一试。 你可以看看这个项目: 基本上,代码如下:
DIUtils.cs
如果您知道要将新数据写入的具体位置,请使用 BinaryWriter 类:
您可以使用随机访问来写入文件的特定位置,但您无法以文本格式执行此操作,您必须直接使用字节。 你为什么不放一个指向文件末尾的指针(字面意思是文件当前大小的四个字节),然后在文件末尾写入插入数据的长度,最后是你的数据想插入自己。例如,如果您在文件中间有一个字符串,并且您想在字符串中间插入几个字符,您可以在字符串中的一些四个字符上写一个指向文件末尾的指针,然后写这四个字符与您首先要插入的字符一起。这都是关于订购数据的。当然,只有你自己编写整个文件才能这样做,我的意思是你没有使用其他编解码器。 你总是需要从插入点重写剩余的字节。如果该点为 0,那么您将重写整个文件。如果是最后一个字节之前的 10 个字节,那么你将重写最后 10 个字节。 无论如何,没有直接支持"插入到文件"的功能。但是下面的代码可以准确的做到。
要获得更好的文件 IO 性能,请使用上面代码中的"神奇的两个幂数"。文件的创建使用了 262144 字节 (256KB) 的缓冲区,这根本没有帮助。如果您运行代码,则插入的相同缓冲区执行"性能作业",您可以从 StopWatch 结果中看到。在我的 PC 上进行的草稿测试给出了以下结果: 创建时间为 13628.8 毫秒,插入时间为 3597.0971 毫秒。 注意插入的目标字节是10,这意味着几乎整个文件都被重写了。 这可能是"可能的",这取决于文件系统如何存储文件以在中间快速插入(即添加额外的)字节。如果远程可行,则可能只能一次执行一个完整块,并且只能通过对文件系统本身进行低级别修改或使用文件系统特定接口来进行。 文件系统通常不是为这种操作而设计的。如果你需要快速插入,你真的需要一个更通用的数据库。 根据您的应用程序,中间立场是将您的插入捆绑在一起,因此您只需重写文件一次而不是二十次。 根据您的项目范围,您可能需要决定将每一行文本与您的文件一起插入到表数据结构中。有点像数据库表,这样您就可以在任何给定时刻插入到特定位置,而不必每次都读入、修改和输出整个文本文件。这是因为您的数据正如您所说的那样"巨大"。您仍会重新创建该文件,但至少您以这种方式创建了一个可扩展的解决方案。 |
最新内容
相关内容
linux命令检清空文件?
linux命令检清空文件?,系统,不了,名称,环境,文件夹,命令,文件,目录,指令,终端,linux删除文件命令rm命令格式:rm[选项]文件命令功能:删除一个目录linux的文件命令d?
linux的文件命令d?,地址,情况,信息,工作,工具,命令,代码,文件,目录,控制台,Linux文件系统操作命令df命令:用于显示文件系统的磁盘空间使用情况,更新文件命令linux?
更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux基础命令增加文件?
linux基础命令增加文件?,系统,时间,名字,文件,基础,数据,命令,名称,首次,密码,linux命令如何新建一个文件终端下键入:touch加文件名,这样就创建linux下读取文件命令?
linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,linux文件系统常用命令1、其中一些常用的命令包括ls、cd、pwd和mklinux字符转换命令?
linux字符转换命令?,系统,工作,密码,信息,命令,基础,名称,软件,工具,电脑,Linux命令之sed-替换字符串1、可以这样做:方法1:sed -i s/被替换的内linux操作数据库命令?
linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参数,如何实现MySQL数据库的基本用法在linux下1、mysql all-databaselinux改文件夹名命令?
linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,选项,linux中用什么命令移修改文件夹名1、linux下使用mv命令来移动linux建文件命令格式?
linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数据,Linux虚拟机命令如何创建新的文件和文件夹1、首先,连接相应linux下载文件的命令linux?
下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,从linux服务器中下载或上传文件1、您要问的是为什么linux服务器一linux命令文件传输?
linux命令文件传输?,系统,数据,命令,文件,基本知识,源文件,目录,目标,功能,语法,...安装rz和sz命令实现Linux与Windows传输文件1、使用rz和szlinux下载数据命令?
linux下载数据命令?,软件,工具,数据,系统,代理,官网,网络,名称,网址,盘中,在linux下如何下载svn上的文件?1、首先,打开linux,进入主界面,然后在主