C# 将除特定行以外的所有行复制到文本文件

C# 将除特定行以外的所有行复制到文本文件,c#,linq,C#,Linq,我正在尝试将sample\u data.txt中的所有数据写入t\u sdata.txt,除了可以找到用户在文本框(txt\u键)上输入的字符串的行之外 [sample data] key,item,qty 0001,Apple,5 0002,Orange,10 0003,Grapes,15 因此,如果我在文本框中输入0002,t_sdata.txt应该包含: [sample output data] key,item,qty 0001,Apple,5 0003,Grapes,15 这是我现

我正在尝试将
sample\u data.txt
中的所有数据写入
t\u sdata.txt
,除了可以找到用户在
文本框(txt\u键)
上输入的字符串的行之外

[sample data]
key,item,qty
0001,Apple,5
0002,Orange,10
0003,Grapes,15
因此,如果我在文本框中输入
0002
t_sdata.txt
应该包含:

[sample output data]
key,item,qty
0001,Apple,5
0003,Grapes,15
这是我现在拥有的,目前没有保存任何内容:

string plist = @"sample_data.txt";
string tdata = @"t_sdata.txt";
var dataline = File.ReadAllLines(plist)
    .SkipWhile(l => !l.StartsWith(txt_key.Text))
    .TakeWhile(l => !l.StartsWith(txt_key.Text) && l != null);
using (StreamWriter w = File.AppendText(tdata))
{
    foreach (var lines in dataline)
    {
        if (dataline == null)
            w.WriteLine(lines);
    }
}
我一直在玩
SkipWhile/TakeWhile
bit,但显然我做错了什么


(不确定是否相关)注意:键可以有不同的长度,01可以有不同于001的数据。您的解决方案似乎很复杂,您并不真正关心哪一行没有被选择到新文件中:

string plist = @"sample_data.txt";
string tdata = @"t_sdata.txt";
string input = "0002";

File.WriteAllLines(tdata, File.ReadLines(plist).Where(line => !line.StartsWith(input)));
对于您的文件格式,一个稍微好一点的解决方案是实际分离不同的字段,因此
02
5
不匹配
0220,Test,5

File.WriteAllLines(tdata, File.ReadLines(plist)
                              .Where(line => line.Split(new char[]{ ',' }).First() != input));

不确定这里会发生什么,因为您正在联机向StreamWriter写入一行if(dataline==null)。逻辑上说,对于dataline中的所有行,如果dataline为null,则写一行-没有意义,或者我遗漏了什么?很好,可能会建议这样做。StartWith()比.Contains()更好。在这种情况下?@MartinDavies取决于OP想要什么,代码说
StartWith
,他的文本说“可以找到”。。。我想OP会找到答案的。也许你的意思是
File.writeAllines
的确-事实上,我想StartsWith(input+“,”)会更好,因为键可以有不同的长度。@MartinDavies你是对的,我添加了一个改进的语句。