gpt4 book ai didi

c# - 在 C# 中替换流中的字符串(不覆盖原始文件)

转载 作者:可可西里 更新时间:2023-11-01 09:05:16 25 4
gpt4 key购买 nike

我有一个文件,我正在将其打开到流中并传递给另一个方法。但是,我想在将流传递给其他方法之前替换文件中的字符串。所以:

string path = "C:/...";
Stream s = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
//need to replace all occurrences of "John" in the file to "Jack" here.
CallMethod(s);

不应修改原始文件,只能修改流。最简单的方法是什么?

谢谢...

最佳答案

如果您只是按行读入文件,然后处理它们,而不是强制自己坚持使用 Stream,这会容易得多,因为流处理文本和二进制文件,并且一次需要能够读入一个字符(这使得这种替换非常困难)。如果您一次读一整行(只要您没有多行替换)就很容易。

var lines = File.ReadLines(path)
.Select(line => line.Replace("John", "Jack"));

请注意 ReadLines 仍然会流式传输数据,而 Select 不需要具体化整个内容,因此您仍然没有将整个文件读入内存在一次执行此操作时。

如果您实际上不需要流式传输数据,您可以轻松地将其全部加载为一个大字符串,进行替换,然后基于该字符串创建一个流:

string data = File.ReadAllText(path)
.Replace("John", "Jack");
byte[] bytes = Encoding.ASCII.GetBytes(data);
Stream s = new MemoryStream(bytes);

关于c# - 在 C# 中替换流中的字符串(不覆盖原始文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com