[英]Best approach for in memory manipulation of text file in memory: read as byte[] first? read as File.ReadAllText() then save as binary?
我需要更改内存中的文件,目前我使用文件流和二进制读取器将文件读入内存为byte []。
我想知道什么是在内存中更改该文件的最佳方法,将byte []转换为字符串,进行更改并执行Encoding.GetBytes()? 或者首先使用File.ReadAllText()然后使用Encoding.GetBytes()将文件作为字符串读取? 或者任何方法都可以不加警告地运作?
任何特殊方法? 我需要用额外的字符或替换字符串替换文件中的特定文本,几十万个文件。 可靠性优于效率。 文件是HTML之类的文本,而不是二进制文件。
使用File.ReadAllText()
读取文件,修改它们,然后执行byte[] byteData = Encoding.UTF8.GetBytes(your_modified_string_from_file)
。 使用保存文件的编码。 这将为您提供一个byte[]
数组。 您可以将byte[]
转换为如下所示的流:
MemoryStream stream = new MemoryStream();
stream.Write(byteData, 0, byteData.Length);
编辑:看起来API中的一个Add
方法可以采用字节数组,因此您不必使用流。
通过先读入字节,你肯定会让自己变得更难。 只需使用StreamReader即可。 您可以使用ReadLine()并一次处理一行来逃脱。 这可以严重降低应用程序的内存使用量,尤其是在使用这么多文件的情况下。
using (var reader = File.OpenText(originalFile))
using (var writer = File.CreateText(tempFile))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var temp = DoMyStuff(line);
writer.WriteLine(temp);
}
}
File.Delete(originalFile);
File.Move(tempFile, originalFile);
根据文件的大小,我会使用File.ReadAllText
来读取它们,使用File.WriteAllText
来创建它们。 这使您无需在读取或写入时调用Close
或Dispose
。
您通常不希望在二进制级别上读取文本文件 - 只需使用File.ReadAllText()
并为其提供文件中使用的正确编码(存在重载 )。 如果文件编码通常是UTF8或UTF32,则该方法可以自动检测并使用正确的结束编码。 同样适用于将其写回 - 如果不是UTF8指定您想要的编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.