打开一个文件并替换C#中的字符串

Gab*_*abe 36 c#

我试图找出打开现有文件的最佳方法,并将所有与声明的字符串匹配的字符串替换为新字符串,然后将其保存,然后关闭.

建议?

Mat*_*ias 79

可以在一行中完成:

File.WriteAllText("Path", Regex.Replace(File.ReadAllText("Path"), "[Pattern]", "Replacement"));
Run Code Online (Sandbox Code Playgroud)

  • 这会将整个文件加载到内存中 (7认同)

Zom*_*eep 28

如果您正在阅读大文件,并且您要替换的字符串可能不会在多行中出现,我会建议如下所示...

private static void ReplaceTextInFile(string originalFile, string outputFile, string searchTerm, string replaceTerm)
{
    string tempLineValue;
    using (FileStream inputStream = File.OpenRead(originalFile) )
    {
        using (StreamReader inputReader = new StreamReader(inputStream))
        {
            using (StreamWriter outputWriter = File.AppendText(outputFile))
            {
                while(null != (tempLineValue = inputReader.ReadLine()))
                {
                    outputWriter.WriteLine(tempLineValue.Replace(searchTerm,replaceTerm));
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你必须删除原始文件,并将新文件重命名为原始文件,但这是微不足道的 - 就像在方法中添加一些基本的错误检查一样.

当然,如果您的替换文本可能跨越两行或更多行,您将不得不做更多的工作,但我会留给您解决.:)


Dan*_*ott 10

using System;
using System.IO;
using System.Text.RegularExpressions;

public static void ReplaceInFile(
                      string filePath, string searchText, string replaceText )
{

    var content = string.Empty;
    using (StreamReader reader = new StreamReader( filePath ))
    {
        content = reader.ReadToEnd();
        reader.Close();
    }

    content = Regex.Replace( content, searchText, replaceText );

    using (StreamWriter writer = new StreamWriter( filePath ))
    {
        writer.Write( content );
        writer.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,你可能想在streamreader/writer周围添加`usings`,这是最佳实践. (2认同)
  • 如果不将其读入内存,您将逐行处理文件.如果要替换文件,可以将其写入新文件并将其复制到旧文件名. (2认同)

Neo*_*Neo 10

对建议的答案略有改进,不需要正则表达式,并且符合问题的要求:

File.WriteAllText("Path", File.ReadAllText("Path").Replace("SearchString", "Replacement"));
Run Code Online (Sandbox Code Playgroud)