修剪所有文件中文本的最快方法

时间:2012-06-07 18:47:43

标签: c#

我有一个功能来修剪目录中所有文件中的所有文本。这是代码

var dbtables = System.IO.Directory.GetFiles(db);

foreach(var table in dbtables)
{
     string text = File.ReadAllText(table);
     File.WriteAllText(table, text.Trim());
}

此目录中有许多大文件,大约需要30分钟才能完成。你知道更快的方法吗?

2 个答案:

答案 0 :(得分:2)

以下是我建议为每个文件执行的操作:

  1. 阅读第一个字符。

  2. 如果是空格,则必须重写整个文件。

    1. 将整个文件读入内存。
    2. 从头开始逐个字符地查找第一个非空白字符。
    3. 从最后逐个字符迭代,找到第一个非空白字符。
    4. 寻找文件的开头。
    5. 只将字符串的中间字符写入文件。
    6. 将文件的长度设置为您编写的字符数。
  3. 如果第一个字符不是空格,则不会修剪开头,所以你可以截断结尾。

    1. 逐个字符地向后读取文件,直到找到一个不是空格的字符。
    2. 如果找到了空格,请将文件长度设置为当前长度减去空白字符数。

答案 1 :(得分:0)

您的代码当前从每个整个文件的开头和结尾修剪空白,而不是每行。如果要基于每行修剪空格,可以使用:

var dbtables = System.IO.Directory.GetFiles(db);

foreach (string table in dbtables)
{
    string temp = table + ".tmp";
    using (StreamWriter target = new StreamWriter(temp))
        foreach (string line in File.ReadLines(table))
            target.WriteLine(line.Trim());

    File.Delete(table);
    File.Move(temp, table);
}