c # редактировать текстовый файл без создания другого файла (без StreamWriter) - PullRequest
0 голосов
/ 16 ноября 2011

Поскольку я использую нелатинский алфавит, если я использую 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();

Здесь я редактирую строку, которую хочу отредактировать в файле, но не сохраняю ее в том же файле. Как это сделать?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2011

Если вы используете один из конструкторов StreamWriter , который принимает кодировку, у вас не должно возникнуть проблем с неправильными символами. Вы также пропускаете первую строку в вашем методе чтения.

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());
}
0 голосов
/ 16 ноября 2011

Я думаю, что самый простой подход будет

  1. открыть файл в режиме чтения / записи

  2. читать все из файла

  3. внести изменения в память

  4. переписать его обратно в файл вместо добавления ..

0 голосов
/ 16 ноября 2011

вы используете 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...