2013-08-26 53 views
1

嘗試進入刪除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(); 

作爲結果的一部分 - 沒有heppend,在那裏我錯了嗎?

+2

是看來你曲解我的【答案】(http://stackoverflow.com/a/18422577/ 2530848)。在我的答案'行'是迭代器變量。 'string []'被命名爲'lines',它也給出了適當的含義。 –

+0

是的,我描述了我的答案,因爲我不能描述評論中的所有代碼 - 在新問題中更好的視覺,對不起,如果我冒犯了你,但實際上你的幫助非常有幫助 - 我只是試着學習它 - 並需要很多幫助 – gbk

+0

不。沒關係。我以爲我完全回答你的問題。正如我上面指出的那樣,沒有任何問題開始使用「標識符(變量名稱)」。這是避免像這樣不必要的混淆的最佳做法。:)很高興幫助 –

回答

2

與●更換行:

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

@Kirill - 不,只是' l.Contains'而不是'line.Contains'。 –

+0

是的!現在我懂了!謝謝 – gbk

0

條件在foreach聲明可能總是通過。你應該使用調試來檢查條件本身,確保它是你的。

也,你應該做的

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

foreach語句之外,這樣你就不會白白浪費時間。

+0

是的,它總是通過 - 這是一個問題,我會盡力把它拿走 – gbk

+0

嘗試 - 相同 - 它總是給我一個通行證?爲什麼它發生? – gbk

+0

@Kirill當你通過條件調試時,「條件」中的字符串是什麼,它在你正在閱讀的文件中? –

1

可以清理很多:

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

我知道你只是重複這個問題的風格,這可能是脫離主題的,但是當你將一個字符(比如逗號)連接到一個字符串時,是否使用char '字符串'字面值?所以寫'str1 +','+ str2'而不是'str1 +','+ str2'。 –

+0

沒有太大的區別,我認爲一個字符串('「,」')可能稍微有效但不明顯。 –