2012-12-21 102 views
0

我寫了一個方法,它會遍歷所有文本文件,替換文本,並用所述更改更新文本框。它在我第一次運行之後起作用,但隨後的執行似乎推斷文件沒有第一次更改。替換文件中的文本

private void changeText(string searchString, string newString, FileInfo[] listOfFiles) 
{ 
    foreach (FileInfo tempfi in listOfFiles)//Foreach File 
    { 
     string fileToBeEdited = tempfi.FullName; 
     File.SetAttributes(fileToBeEdited, File.GetAttributes(fileToBeEdited) & ~FileAttributes.ReadOnly); //Remove ReadOnly Property 
     string strFile = System.IO.File.ReadAllText(fileToBeEdited); //Reads In Text File 
     if(strFile.Contains(newString))//If the replacement string is contained in the text file 
     { 
      strFile = strFile.Replace(searchString, newString); 
      System.IO.File.WriteAllText(fileToBeEdited, strFile); //Write changes to File 
      myTextBox.Text = "File Changed: " + fileTobeEdited.ToString() + Environment.NewLine; //Notify User 
     } 
    } 
} 

如果我運行這1次或100次我的文本文件更新就好了。如果我第二次運行這個文本框,它會重新更新,說它更新了新文件。

我希望這種方法在第一次運行後不會找到任何要替換的文本。

+3

它不會出現您實際上替換文件中的任何內容。所以,你實際上每次都找到相同的內容。 – PhoenixReborn

+1

您不會對文件進行任何更改。您將其數據讀取到strFile,檢查strFile是否包含一些字符串,將srtFile保存迴文件。沒有編輯 – Steve

+0

對不起(這是在我的代碼中,但沒有在我的初始文章 – Demasterpl

回答

1

變量fileToBeEdited未初始化。

你必須查找包含searchString而非newString的文件!

private void changeText(string searchString, string newString, FileInfo[] listOfFiles) 
{ 
    foreach (FileInfo tempfi in listOfFiles) { 
     string fileToBeEdited = tempfi.FullName; // <== This line was missing 
     File.SetAttributes(tempfi.FullName, File.GetAttributes(fileToBeEdited) & 
              ~FileAttributes.ReadOnly); 
     string strFile = System.IO.File.ReadAllText(fileToBeEdited); 
     if (strFile.Contains(searchString)) { // <== replaced newString by searchString 
      strFile = strFile.Replace(searchString, newString); 
      System.IO.File.WriteAllText(fileToBeEdited, strFile); 
      myTextBox.Text = "File Changed: " + fileToBeEdited.ToString() + 
          Environment.NewLine; 
     } 
    } 
} 
+0

是的,我在第一篇文章中修復了「fileToBeEdited」部分。 Contains參數。 – Demasterpl

0

它看起來並不像你實際上正在改變文件。您正在檢查文件中是否包含字符串,如果是,則將該文件寫回。你將不得不做這樣的事情:

private void changeText(string searchString, string newString, FileInfo[] listOfFiles) 
{ 
    foreach (FileInfo tempfi in listOfFiles)//Foreach File 
    { 
     File.SetAttributes(fileToBeEdited, File.GetAttributes(fileToBeEdited) & ~FileAttributes.ReadOnly); //Remove ReadOnly Property 
     string strFile = System.IO.File.ReadAllText(fileToBeEdited); //Reads In Text File 
     if(strFile.Contains(newString))//If the replacement string is contained in the text file 
     { 
      strFile = strFile.Replace(searchString,newString); // make the changes 
      System.IO.File.WriteAllText(fileToBeEdited, strFile); //Write changes to File 
      myTextBox.Text = "File Changed: " + fileTobeEdited.ToString() + Environment.NewLine; //Notify User 
     } 
    } 
} 

然後你就可以真正將更改保存到文件,並在第一次運行之後的新文件將被寫入。

+0

對不起,這是我的錯,我錯過了「fileToBeEditied.Replace」在我的第一篇文章中寫了一篇文章: – Demasterpl

0

也許我誤解了代碼,但是您似乎錯過了替換!

string strFile = System.IO.File.ReadAllText(fileToBeEdited); //Reads In Text File 
    if(strFile.Contains(searchString))//If the replacement string is contained in the text file 
    { 
     strFile = strFile.Replace(searchString, newString); 
.... 

另請注意我如何檢查文件是否包含搜索字符串,而不是新聞串。

+0

是的,謝謝,我錯過了我在我的文章中解決了這個問題,但是在我的代碼中。 – Demasterpl