我让我的项目写入两个文本文件。一个用于输入,一个用于输出。 我最后需要它们,写入同一个文本文件。
到目前为止,这是我的代码:
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;
}
}
由于
答案 0 :(得分: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.Equals
更改line.StartsWith
。
鉴于此输入文件:
This is the begin of the file -- A line of text -- Another line of text
它将产生此输出:
This is the begin of the file A line of text Another line of text
备注强>
在您的示例中,您在while
循环中使用了此代码:
File.WriteAllText(file,
File.ReadAllText(text).Replace(line_to_delete, ""));
没有其他任何东西就足够了(但它会删除不需要的行,用空的代替它们)。它的问题(如果保持空行不是问题)是它将读取内存中的整个文件,如果文件非常大,它可能(非常)慢。 只是为了获取信息,这是你可以重写它来执行相同的任务(对于不太大的文件,因为它在内存中工作):
File.WriteAllText(outputFilePath, File.ReadAllText(inputFilePath).
Where(x => !String.Equals(x, lineToDelete));