我编写了一个方法,它将遍历所有文本文件,替换文本,并使用所述更改更新文本框。它在我第一次运行它之后工作,但后续执行似乎推断文件没有第一次更改。
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次我的文本文件更新就好了。如果我再次运行此文本框,则会重新更新文本框,说明它更新了新文件。
我希望这个方法在第一次运行后找不到任何要替换的文本。
答案 0 :(得分: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;
}
}
}
答案 1 :(得分: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
}
}
}
然后,您将能够将更改实际保存到文件中,并在第一次运行后写入新文件。
答案 2 :(得分: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);
....
另请注意我如何检查文件是否包含searchstring,而不是新闻字符串。