c#编辑txt文件而不创建另一个文件(无StreamWriter)

c#编辑txt文件而不创建另一个文件(无StreamWriter),c#,file,stream,C#,File,Stream,因为我使用的是非拉丁字母,如果我使用StreamWriter,字符就不正确 String line; StreamReader sr = new StreamReader(@"C:\Users\John\Desktop\result.html"); line = sr.ReadLine(); while (line != null) { line = sr.ReadLine();

因为我使用的是非拉丁字母,如果我使用StreamWriter,字符就不正确

        String line;
        StreamReader sr = new StreamReader(@"C:\Users\John\Desktop\result.html");
        line = sr.ReadLine();
        while (line != null)
        {
            line = sr.ReadLine();
            if (line.Contains("</head>"))
            {
                line = "<img src=\"result_files\\image003.png\"/>" + line;
            }
        }
        sr.Close();
字符串行;
StreamReader sr=新的StreamReader(@“C:\Users\John\Desktop\result.html”);
line=sr.ReadLine();
while(行!=null)
{
line=sr.ReadLine();
如果(第行包含(“”))
{
line=”“+行;
}
}
高级关闭();

这里我正在编辑我想在文件中编辑的字符串,但我没有将其保存在同一个文件中。如何做到这一点?

您使用的是StreamReader。名字说明了它的功能。阅读

脏代码

        if (File.Exists(fileName))
        {
            int counter = 1;
            StringBuilder sb = new StringBuilder();
            foreach (string s in File.ReadAllLines(fileName, Encoding.Default))
            {
                if (s.Contains("</head>"))
                {
                    s= "<img src=\"result_files\\image003.png\"/>" + line;
                }

                    sb.AppendLine(s);

                counter++;
            }

            File.WriteAllText(fileName, sb.ToString(), Encoding.Default);
        }
if(File.Exists(fileName))
{
int计数器=1;
StringBuilder sb=新的StringBuilder();
foreach(File.ReadAllLines(fileName,Encoding.Default)中的字符串s)
{
如果(s)包含(“”)
{
s=”“+行;
}
某人在电话线旁留言;
计数器++;
}
File.WriteAllText(文件名,sb.ToString(),Encoding.Default);
}
如果使用其中一个接受编码的,则不应出现任何错误字符的问题。你也跳过了阅读方法的第一行

Encoding encoding;
StringBuilder output = new StringBuilder();
using (StreamReader sr = new StreamReader(filename))
{
    string line;
    encoding = sr.CurrentEncoding;
    while ((line = sr.ReadLine()) != null)
    {
        if (line.Contains("</head>"))
        {
            line = "<img src=\"result_files\\image003.png\"/>" + line;
        }
        output.AppendLine(line);
    }
}
using (StreamWriter writer = new StreamWriter(filename, false, encoding))
{
    writer.Write(output.ToString());
}
编码;
StringBuilder输出=新的StringBuilder();
使用(StreamReader sr=新StreamReader(文件名))
{
弦线;
编码=sr.CurrentEncoding;
而((line=sr.ReadLine())!=null)
{
如果(第行包含(“”))
{
line=”“+行;
}
输出。追加行(行);
}
}
使用(StreamWriter=newstreamwriter(文件名,false,编码))
{
writer.Write(output.ToString());
}

我认为最简单的方法是

  • 以读/写模式打开文件

  • 读取文件中的所有内容

  • 在内存中进行修改

  • 将其重写回文件,而不是追加


  • 请看一下这个链接,我认为在你的代码片段中,你只是在堆中操纵字符串,StreamReader只是为了读而不是为了写,你想写哪个非拉丁字母?您可以在StreamWriter上设置编码,但我并不总是有这个文件。也许编码会有所不同。从你上次的评论中不清楚问题出在哪里。在读取文件或将文件写回新文件时,您是否遇到错误的字符?你真的想要一个新的文件还是只想修改现有的文件?这给了我一个空的输出。我刚刚重新测试过,它对我来说很好。我只是用它来复制一个文本文件。没问题。我刚刚编辑了这个示例,使其始终使用原始文件中的编码。实际上,我又遇到了奇怪的字符。您可以发布一个指向我可以测试的文件的链接吗?