Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从文件中删除条目_C#_String_List_Csv_Filestream - Fatal编程技术网

C# 如何从文件中删除条目

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

如果我只知道字符串的一部分,尝试从csv文件中删除一些条目 代码

//打开文件
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);