将大字符串写入文件的最佳方法
在C#中,我正在读取中等大小的文件(100 KB~1 MB),修改内容的某些部分,最后写入不同的文件。 所有内容都是文字。 修改是作为字符串对象和字符串操作完成的。 我目前的做法是:
- 使用
StreamReader
读取原始文件中的每一行。 - 打开
StringBuilder
以获取新文件的内容。 - 修改字符串对象并调用
StringBuilder
AppendLine
(直到文件末尾) - 打开一个新的
StreamWriter
,并将StringBuilder
写入写入流。
但是,我发现StremWriter.Write
截断32768字节(2 ^ 16),但StringBuilder
的长度大StremWriter.Write
。 我可以编写一个简单的循环来保证整个字符串到文件。 但是,我想知道在执行此任务时C#中最有效的方法是什么?
总而言之,我只想修改文本文件的某些部分并写入不同的文件。 但是,文本文件大小可能大于32768字节。
==答案==我很抱歉让你烦恼! 只是我没有打电话给flush
。 StremWriter.Write
没有短(例如,2 ^ 16)限制。
StreamWriter.Write
才不是
截断字符串并没有限制。
在内部它使用String.CopyTo
,另一方面,它使用不安全的代码 (使用fixed
)来复制字符,因此它是最有效的 。
问题很可能与不关闭作者有关。 请参阅https://msdn.microsoft.com/en-us/library/system.io.streamwriter.flush.aspx 。
但我建议不要将整个文件加载到内存中,如果可以避免的话。
你能试试这个:
void Test() { using (var inputFile = File.OpenText(@"c:in.txt")) { using (var outputFile = File.CreateText(@"c:out.txt")) { string current; while ((current = inputFile.ReadLine()) != null) { outputFile.WriteLine(Process(current)); } } } } string Process(string current) { return current.ToLower(); }
它可以避免在内存中加载完整文件,逐行处理并直接写入
而不是通过孔dokument运行我将使用正则表达式找到你要找的样品:
public List GetAllProfiles() { List profileNames = new List (); using (StreamReader reader = new StreamReader(_folderLocation + "profiles.pg")) { string profiles = reader.ReadToEnd(); var regex = new Regex("nname=([^r]{0,})", RegexOptions.IgnoreCase); var regexMatchs = regex.Matches(profiles); profileNames.AddRange(from Match regexMatch in regexMatchs select regexMatch.Groups[1].Value); } return profileNames; }
我发现这个答案在类似情况下非常有用。 没有任何源代码,它更像是提示。 我希望它有所帮助。
那么,这完全取决于你想要修改的内容。 如果您对文本文件的一部分的修改依赖于文本文件的另一部分,则显然需要在内存中同时包含这两部分。 但是,如果您只需要逐行修改文本文件,那么请使用以下内容:
using (StreamReader sr = new StreamReader(@"test.txt")) { using (StreamWriter sw = new StreamWriter(@"modifiedtest.txt")) { while (!sr.EndOfStream) { string line = sr.ReadLine(); //do some modifications sw.WriteLine(line); sw.Flush(); //force line to be written to disk } } }
你试过File.WriteAllText()
方法吗?
上述就是C#学习教程:将大字符串写入文件的最佳方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984581.html