繁体   English   中英

在内存中操作文本文件的最佳方法:首先读取为byte []? 读为File.ReadAllText()然后保存为二进制?

[英]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来创建它们。 这使您无需在读取或写入时调用CloseDispose

您通常不希望在二进制级别上读取文本文件 - 只需使用File.ReadAllText()并为其提供文件中使用的正确编码(存在重载 )。 如果文件编码通常是UTF8或UTF32,则该方法可以自动检测并使用正确的结束编码。 同样适用于将其写回 - 如果不是UTF8指定您想要的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM