首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在内存中对文本文件进行内存操作的最佳方法:首先读取为byte[]?读取为File.ReadAllText(),然后保存为二进制?

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

Stack Overflow用户
提问于 2012-04-26 23:29:27
回答 4查看 2.1K关注 0票数 3

我需要更改内存中的文件,目前我使用文件流和二进制阅读器将文件读取到内存中的byte[]中。

我想知道在内存中更改该文件、将byte[]转换为字符串、进行更改并执行Encoding.GetBytes()的最佳方法是什么?或者先使用File.ReadAllText(),然后使用Encoding.GetBytes()读取字符串形式的文件?或者任何方法都可以在没有警告的情况下工作?

有什么特别的方法吗?我需要用额外的字符或替换字符串替换文件中的特定文本,大约有100,000个文件。可靠性比效率更重要。文件是类似HTML的文本,而不是二进制文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-26 23:54:18

使用File.ReadAllText()读取文件,修改它们,然后执行byte[] byteData = Encoding.UTF8.GetBytes(your_modified_string_from_file)。使用保存文件时使用的编码。这将为您提供一个byte[]数组。您可以将byte[]转换为如下所示的流:

代码语言:javascript
代码运行次数:0
运行
复制
MemoryStream stream = new MemoryStream();
stream.Write(byteData, 0, byteData.Length);

API:它看起来像是中的一个Add方法可以接受字节数组,所以你不需要使用流。

票数 2
EN

Stack Overflow用户

发布于 2012-04-26 23:34:31

如果你先读入字节,肯定会让事情变得更难。只需使用StreamReader即可。您可能可以使用ReadLine()并一次处理一行。这可以大大减少你的应用程序的内存使用量,特别是当你在处理这么多文件的时候。

代码语言:javascript
代码运行次数:0
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2012-04-26 23:38:56

根据文件的大小,我会使用File.ReadAllText来读取它们,使用File.WriteAllText来写入它们。这使您不必在读取或写入时调用CloseDispose

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10336595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档