0

我有我的项目写入两个文本文件。一个用于输入,一个用于输出。最后,我需要它们写入同一个文本文件。

到目前为止,这是我的代码:

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath( Environment.SpecialFolder.Desktop );
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );

        using (StreamReader reader = new StreamReader( text ))
        {
            using (StreamWriter writer = new StreamWriter( file ))
            {
                while (( line = reader.ReadLine() ) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        File.WriteAllText( file, File.ReadAllText( text ).Replace( line_to_delete, "" ) );
                    continue;
                }
            }

谢谢

4

1 回答 1

3

如果要读取输入文件中的所有行并将它们全部写入输出文件,但与给定文本匹配的行除外:

public static void StripUnwantedLines(
    string inputFilePath,
    string outputFilePath,
    string lineToRemove)
{
    using (StreamReader reader = new StreamReader(inputFilePath))
    using (StreamWriter writer = new StreamWriter(outputFilePath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            bool isUnwanted = String.Equals(line, lineToRemove,
                StringComparison.CurrentCultureIgnoreCase);

            if (!isUnwanted)
                writer.WriteLine(line);
        }
    }
}

在这种情况下,比较是使用当前文化进行的(如果您需要搜索“--”,这可能并不重要,但可以明确指定)并且不区分大小写。如果您希望跳过以给定文本开头的所有行,则可能
需要更改。String.Equalsline.StartsWith

给定这个输入文件:

这是文件的开头
--
一行文字
--
另一行文字

它将产生以下输出:

这是文件的开头
一行文字
另一行文字

注意
在您的示例中,您在while循环中使用了此代码:

File.WriteAllText(file, 
    File.ReadAllText(text).Replace(line_to_delete, ""));

没有其他任何东西可能就足够了(但它会删除不需要的行,用空行替换它们)。它的问题(如果保持空行不是问题)是它会读取内存中的整个文件,如果文件真的很大,它可能会(非常)慢。仅供参考,这是您如何重写它以执行相同的任务(对于不是太大的文件,因为它在内存中工作):

File.WriteAllText(outputFilePath, File.ReadAllText(inputFilePath).
    Where(x => !String.Equals(x, lineToDelete));
于 2012-05-16T12:26:51.567 回答