C# 如何从文件中删除条目
如果我只知道字符串的一部分,尝试从csv文件中删除一些条目 代码C# 如何从文件中删除条目,c#,string,list,csv,filestream,C#,String,List,Csv,Filestream,如果我只知道字符串的一部分,尝试从csv文件中删除一些条目 代码 //打开文件 FileStream fs=newfilestream(filePath,FileMode.Open, FileAccess.ReadWrite); StreamReader sr=新的StreamReader(fs); //将文件条目分隔为单独的行 string[]line=sr.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.Rem
//打开文件
FileStream fs=newfilestream(filePath,FileMode.Open,
FileAccess.ReadWrite);
StreamReader sr=新的StreamReader(fs);
//将文件条目分隔为单独的行
string[]line=sr.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
//查找所需条目并创建新列表,但不包含该条目
List finalData=新列表();
foreach(行中的变量l)
{
如果(!line.Contains((dateTimePicker1.Text.ToString().Trim()+,'+eventNameDeleteTextBox.Text.ToString().Trim()+,'))
最后数据。添加(l);
}
//转换为数组
string toCsvoutput=string.Join(Environment.NewLine,finalData.ToArray());
//viewTextBox1.Text=toCsvoutput;
//更新文件
高级关闭();
FileStream fs1=新FileStream(文件路径,FileMode.Open,FileAccess.Write,FileShare.None);
StreamWriter sw=新StreamWriter(fs1);
软件写入线(TOCSV输出);
sw.Close();
结果-无任何heppend,我错在哪里?foreach语句中的条件可能总是通过。您应该使用debug来检查条件本身,确保它是您所认为的 还有,你应该这样做
string condition = dateTimePicker1.Text.ToString().Trim() + ','+ eventNameDeleteTextBox.Text.ToString().Trim()+',';
在foreach
语句之外,这样您就不会白白浪费时间。将行替换为l:
if (!l.Contains((dateTimePicker1.Text.ToString().Trim() + ','+
eventNameDeleteTextBox.Text.ToString().Trim()+',')))
finalData.Add(l);
你可以清理很多东西:
string skipText = (dateTimePicker1.Text.ToString().Trim() + ','+
eventNameDeleteTextBox.Text.ToString().Trim()+',')
var linesIn = System.IO.File.ReadLines(filePath);
var linesOut = linesIn.Where(line => ! line.Contains(skipText));
linesOut = linesOut.ToList(); // make sure the file is closed again
System.IO.File.WriteAllLines(filePath, linesOut);
是的,它总是通过-这是一个问题,我会尽量把它放在一边-同样-它总是给我通过吗?为什么,;s happend?@Kirill当你在条件下通过调试时,“条件”中的字符串是什么,它在你正在读取的文件中吗?现在没事了-问题是下一个-我混合变量使用line而不是l-比如@RezaArab和@Henk Holtermansad@Kirill然后接受他的回答,但你仍然应该使用字符串condition@Kirill-不,只是
l.Contains
而不是line.Contains
。你好像把我的特征搞错了。在我的回答中,行
是迭代器变量string[]
的名称为lines
,这也赋予了正确的含义。是的,感谢你的回答,我描述了我所拥有的,因为我不能在评论中描述所有的代码-在新问题中有更好的视觉效果,如果我冒犯了你,很抱歉,但你的帮助确实非常有用-我只是在尝试学习-需要很多帮助。不要介意。我想我完全回答了你的问题。开始使用标识符(变量名)
没有问题,正如我上面指出的。这是避免像这样不必要的混乱的最佳做法。:)很乐意帮忙。多谢你的帮助,我非常感激。还发现,为了使用我的代码正确地存储数据,我还必须在写入之前从所有数据中删除trunc文件。用于它//trunc file FileStream tranc=new FileStream(filePath,FileMode.Truncate)中的所有数据;关档()代码>如果不执行此操作-结果是获取存储在文件中的不支持估价师是。我忘了提它。我知道你只是重复了问题的风格,这可能是离题了,但是当你把一个字符(比如逗号)加在一个字符串上时,使用char
literal而不是string
literal有什么优点或缺点?所以写str1+”、“+str2
而不是str1+”、“+str2
。差别不大,我认为字符串(”、“
)可能会稍微有效一些,但并不明显。
string skipText = (dateTimePicker1.Text.ToString().Trim() + ','+
eventNameDeleteTextBox.Text.ToString().Trim()+',')
var linesIn = System.IO.File.ReadLines(filePath);
var linesOut = linesIn.Where(line => ! line.Contains(skipText));
linesOut = linesOut.ToList(); // make sure the file is closed again
System.IO.File.WriteAllLines(filePath, linesOut);