当前位置: 首页 > 编程语言 > C#

使用C#-.NET替换文件中文本的最佳方法是什么?Share

时间:2023-04-11 00:46:18 C#

使用C#/.NET替换文件中文本的最佳方法是什么?我有一个文本文件,它是作为非常大的数据提取的一部分编写的。文本文件的第一行是提取的“帐户”数。由于这种提取的性质,这个数字直到过程的最后才知道,但文件可能很大(数百兆字节)。在C#/.NET中打开文件(在本例中为简单文本文件)并替换文本第一“行”中的数据的最佳方法是什么?重要说明:-我不需要替换“固定字节数”-这很简单。这里的问题是需要在文件顶部插入的数据是可变的。重要说明2:-有些人要求/提到只将数据保存在内存中并替换它……但这是完全不可能的。更新此进程的原因是因为有时它会在将多个演出加载到内存中时崩溃。如果可以,您应该插入一个占位符,用实际数字和末尾的空格覆盖它。如果这不是一个选项,请先将数据写入缓存文件。当您知道实际数字时,创建一个输出文件并附加缓存中的数据。BEST是非常主观的。对于任何一个小文件,您都可以轻松地在内存中打开整个文件并使用字符串替换来替换您想要的内容,然后重写该文件。即使对于较大的文件,加载到内存中也不应该那么困难。在多内存时代,我会认为在内存中轻松完成数百兆字节。你测试过这种天真的方法吗?你看到它的真正问题了吗?如果这是一个非常大的文件(大小为千兆字节),我会考虑先将所有数据写入一个临时文件,然后写入正确的文件,首先进入标题行,然后附加其余数据。由于它只是文本,我可能只是向DOS发出一条语句:TYPEtemp.txt>>outfile.txt我不需要替换“固定字节数”你确定吗?如果你在文件的第一行写了一个大数字(UInt32.MaxValue或UInt64.MaxValue),那么当你找到正确的实际数字时,你可以用正确的数字替换这个字节数,但用零填充,所以它仍然是一个有效的整数。例如用000100替换999999-你的“大数字占位符”-帐户的实际数量如果我正确理解这个问题,在我看来?在C#/.NET中打开文件(在本例中为简单文本文件)并替换文本第一“行”中的数据的最佳方法是什么?首次创建文件时,如何将令牌{UserCount}放在文件顶部。然后使用TextReader逐行读取文件。如果它是{UserCount}的第一行,请替换为您的值。使用TextWriter写出您在示例中阅读的每一行:intlineNumber=1;int用户数=1234;字符串行=空;使用(TextReadertr=File.OpenText(“OriginalFile”))使用(TextWritertw=File.CreateText(“ResultFile”)){while((line=tr.ReadLine())!=null){if(lineNumber==1){line=line.Replace("{UserCount}",userCount.ToString());}tw.WriteLine(线);行号++;如果提取的文件只有几百兆字节,那么您可以轻松地将所有文本保留在内存中,直到提取完成。然后您可以将输出文件作为最后一个操作写入,从记录计数开始。好的,早些时候我提出了一种方法,如果它处理现有文件会更好。但在您的情况下,您想要创建文件并在创建过程中返回顶部并写出用户数。就是这样。这是一种避免您必须编写临时文件的方法。C#学习教程就是这些:使用C#/.NET替换文件中文本的最佳方法是什么?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——privatevoidWriteUsers(){stringuserCountString=null;ASCIIEncodingenc=newASCIIEncoding();byte[]userCountBytes=null;int用户计数器=0;using(StreamWritersw=File.CreateText("myfile.txt")){//写一个空行并返回//注意这一行稍后将包含我们的用户count.sw.WriteLine();//写出记录并跟踪计数for(inti=1;i本文摘自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除转载请注明出处: