2012-04-29 180 views

回答

14

最簡單的方法是重寫整個文件,而不用包含該單詞的行。您可以使用LINQ爲:

var oldLines = System.IO.File.ReadAllLines(path); 
var newLines = oldLines.Where(line => !line.Contains(wordToDelete)); 
System.IO.File.WriteAllLines(path, newLines); 

如果你只是想刪除包含(字符不僅序列)的所有行,你需要' '分割線:

var newLines = oldLines.Select(line => new { 
      Line = line, 
      Words = line.Split(' ') 
     }) 
     .Where(lineInfo => !lineInfo.Words.Contains(wordToDelete)) 
     .Select(lineInfo => lineInfo.Line); 
+0

啊是的,這是完全有道理的,我剛剛在我的代碼中使用它,它已經工作:) Thankyou非常多! – user1364063 2012-04-29 12:03:28

4

您可以輕鬆地做到這一點,而不LINK

   string search_text = text; 
       string old; 
       string n=""; 
       StreamReader sr = File.OpenText(FileName); 
       while ((old = sr.ReadLine()) != null) 
       { 
        if (!old.Contains(search_text)) 
        { 
         n += old+Environment.NewLine; 
        } 
       } 
       sr.Close(); 
       File.WriteAllText(FileName, n); 
+0

@mMd Kamruzzaman Pallob我怎麼能爲多個詞..這對我完全工作..但對於一個單詞..我需要尋找三個字..我怎麼能做到這一點..謝謝 – 2014-11-03 18:31:51

1

代碼:

「using System.Linq;」是必須的。

寫自己的擴展方法IsNotAnyOf(,)(把它放在一個靜態類).Where(n => n.IsNotAnyOf(...))...();的調用方法(即它被稱爲) for循環,如果條件得到滿足將返回false,如果不是該方法將返回true:

static void aMethod() 
{ 
    string[] wordsToDelete = { "aa", "bb" }; 
    string[] Lines = System.IO.File.ReadAllLines(TextFilePath) 
     .Where(n => n.IsNotAnyOf(wordsToDelete)).ToArray(); 
    IO.File.WriteAllLines(TextFilePath, Lines); 
} 

static private bool IsNotAnyOf(this string n, string[] wordsToDelete) 
{ for (int ct = 0; ct < wordsToDelete.Length; ct++) 
     if (n == wordsToDelete[ct]) return false; 
    return true; 
} 
相關問題