简体   繁体   English

如何从文件中删除条目

[英]How to delete entry from file

try to delete some entry from csv file, if i know only part of string code 尝试从csv文件中删除一些条目,如果我只知道字符串代码的一部分

 //open File
        FileStream fs = new FileStream(filePath, FileMode.Open, 
            FileAccess.ReadWrite);
        StreamReader sr = new StreamReader(fs);            
 //divide file entry for separate lines
        string []line = sr.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
 // find required entry and create new List without it
        List<string> finalData = new List<string>();
        foreach (var l in line)
        {
            if (!line.Contains((dateTimePicker1.Text.ToString().Trim() + ','+ eventNameDeleteTextBox.Text.ToString().Trim()+',')))
                finalData.Add(l);
        }
  // convert to array
        string toCsvoutput = string.Join(Environment.NewLine, finalData.ToArray());
      //  viewTextBox1.Text=toCsvoutput; 

        //updateFile
        sr.Close();
        FileStream fs1 = new FileStream(filePath, FileMode.Open,FileAccess.Write, FileShare.None);
        StreamWriter sw = new StreamWriter(fs1);
        sw.WriteLine(toCsvoutput);
        sw.Close();

As result - nothing heppend, where i'm wrong? 结果 - 什么都没有,我错了?

Replace line with l: 用l替换行:

  if (!l.Contains((dateTimePicker1.Text.ToString().Trim() + ','+ 
    eventNameDeleteTextBox.Text.ToString().Trim()+',')))
     finalData.Add(l);

You can clean up a lot: 你可以清理很多:

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);

the condition in the foreach statement probably always pass. foreach语句中的条件可能总是通过。 you should use debug to check the condition itself, make sure it's what you though. 你应该使用debug来检查条件本身,确保它是你的。

also, you should do 你也应该这样做

string condition = dateTimePicker1.Text.ToString().Trim() + ','+ eventNameDeleteTextBox.Text.ToString().Trim()+',';

outside the foreach statement, so you won't waste time for nothing. foreach声明之外,所以你不会浪费时间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM