【问题标题】:Formatting a text file, how to update the file after I finished parsing it?格式化文本文件,解析完成后如何更新文件?
【发布时间】:2009-11-26 21:38:54
【问题描述】:

如何打开文件,对文件执行一些正则表达式,然后保存文件?

我知道我可以打开一个文件,逐行读取,但是如何更新文件的实际内容然后保存文件?

【问题讨论】:

  • 接受更多答案。你不是免费工作,我们也不是。
  • 我是,缓存需要一段时间才能更新我的百分比。
  • 其实mrblah有很多个问题,所以他接受73个新个问题,也就是37个问题后,他的esentage会变成50%现有的不被接受的 ;)

标签: c# file-io


【解决方案1】:

无论文件大小如何,以下方法都可以工作,并且如果操作在完成之前失败,无论如何也不会损坏原始文件:

string inputFile = Path.Combine(Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments), "temp.txt");
string outputFile = Path.Combine(Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments), "temp2.txt");
using (StreamReader input = File.OpenText(inputFile))
using (Stream output = File.OpenWrite(outputFile))
using (StreamWriter writer = new StreamWriter(output))
{
    while (!input.EndOfStream)
    {
        // read line
        string line = input.ReadLine();
        // process line in some way

        // write the file to temp file
        writer.WriteLine(line);
    }
}
File.Delete(inputFile); // delete original file
File.Move(outputFile, inputFile); // rename temp file to original file name

【讨论】:

    【解决方案2】:
    string[] lines = File.ReadAllLines(path);
    string[] transformedLines = lines.Select(s => Transform(s)).ToArray();
    File.WriteAllLines(path, transformedLines);
    

    这里例如Transform

    public static string Transform(string s) {
        return s.Substring(0, 1) + Char.ToUpper(s[1]) + s.Substring(2);
    }
    

    【讨论】:

    • 可能一次将大量数据加载到内存中。
    • 很好很短,我的文件没那么大。好一个杰森。
    • (同意 mrblah,这只是一个警告......虽然可能不是很有用)。 +1
    • @Roman:可能,是的。但对于大小合理的文件,它简短、简单且切中要害。亲吻。
    【解决方案3】:

    打开文件进行读取。将文件的所有内容读入内存。关闭文件。打开文件进行写入。将所有内容写入文件。关闭文件。

    或者,如果文件非常大:

    打开文件A 进行读取。打开一个新文件(fileB)进行写入。处理fileA的每一行并保存到fileB。关闭文件A。关闭文件 B.删除文件A。将文件 B 重命名为文件 A。

    【讨论】:

      【解决方案4】:

      读完后关闭文件
      重新打开文件进行写入
      写回新的内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多