我需要更改内存中的文件,目前我使用文件流和二进制阅读器将文件读取到内存中的byte[]中。
我想知道在内存中更改该文件、将byte[]转换为字符串、进行更改并执行Encoding.GetBytes()的最佳方法是什么?或者先使用File.ReadAllText(),然后使用Encoding.GetBytes()读取字符串形式的文件?或者任何方法都可以在没有警告的情况下工作?
有什么特别的方法吗?我需要用额外的字符或替换字符串替换文件中的特定文本,大约有100,000个文件。可靠性比效率更重要。文件是类似HTML的文本,而不是二进制文件。
发布于 2012-04-26 15:54:18
使用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
方法可以接受字节数组,所以你不需要使用流。
发布于 2012-04-26 15:34:31
如果你先读入字节,肯定会让事情变得更难。只需使用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);
发布于 2012-04-26 15:38:56
根据文件的大小,我会使用File.ReadAllText
来读取它们,使用File.WriteAllText
来写入它们。这使您不必在读取或写入时调用Close
或Dispose
。
https://stackoverflow.com/questions/10336595
复制相似问题