C# 有没有更好的方法来写入、读取和修改文本行并将它们写入输出流?

C# 有没有更好的方法来写入、读取和修改文本行并将它们写入输出流?,c#,asp.net,file-io,C#,Asp.net,File Io,我目前正在尝试读取一个文件,修改其中的一些占位符,然后将该文件写入输出流。由于它是aspx.net中页面响应的输出流,所以我在这里使用OutputStream.Write方法(文件最后是一个附件) 最初我有: using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { while (readBytes < fs.Length)

我目前正在尝试读取一个文件,修改其中的一些占位符,然后将该文件写入输出流。由于它是aspx.net中页面响应的输出流,所以我在这里使用OutputStream.Write方法(文件最后是一个附件)

最初我有:

using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    while (readBytes < fs.Length)
    {
        tmpReadBytes = fs.Read(bytes, 0, bytes.Length);
        if (tmpReadBytes > 0)
        {
            readBytes += tmpReadBytes;
            page.Response.OutputStream.Write(bytes, 0, tmpReadBytes);
        }
    }
}
但它看起来效率低下,尤其是在转换方面。所以我的问题是:有没有更好的方法


请注意,文件本身不是很大,它是一个大约3-4KB大小的文本文件。

您不需要自己处理字节

如果你知道这个文件很小,而且总是很小

this.Response.Write(File.ReadAllText("path").Replace("old", "new"));
否则

using (var stream = new FileStream("path", FileMode.Open))
{
    using (var streamReader = new StreamReader(stream))
    {
        while (streamReader.Peek() != -1)
        {
            this.Response.Write(streamReader.ReadLine().Replace("old", "new"));
        }
    }
}

要获取字符串数组中的行,请执行以下操作:

string[] lines = File.ReadAllLines(file);
要更改线条,请使用循环

for (int i = 0; i < lines.Length; i++)
{
    lines[i] = lines[i].Replace("#PlaceHolder#", "NewValue");
}
然后将字符串保存到文件中


File.WriteAllText(文件,输出)

如果你拥有的是文本,为什么你要读字节而不是文本?Response.WriteLine(modifiedLine)有什么问题?@Albireo原始代码不是我写的(我接管了那个项目)。我猜这是因为当时他使用了.Write作为OutputStream,他不想转换读取的字节,因此使用了FileStream.read方法并读取字节而不是文本),然后从orbit中删除整个代码段,并将其替换为
File.ReadAllText
,这样就可以了。@Luaan我没有看到HttpResponse类的任何WriteLine方法?写我看到的(字符串)和写的文件。写(字符串)是你的意思吗?(在outputstream类中搜索了整个时间而不是httpresponse,因此到目前为止没有看到这些方法)您当前编写的后一个方法总共只能读写一行?甚至可能是最好的:)在那里接受了您的答案。tnx又来了!
for (int i = 0; i < lines.Length; i++)
{
    lines[i] = lines[i].Replace("#PlaceHolder#", "NewValue");
}
string output = "";
foreach(string line in lines)
{
    output+="\n"+line;
}