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 次,我的文本文件就会更新得很好。如果我第二次运行它,我的文本框会重新更新,说它更新了新文件。

我希望此方法在第一次运行后找不到任何要替换的文本。

4

3 回答 3

1

变量fileToBeEdited未初始化。

您必须查找包含searchStringnot的文件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;
        }
    }
}
于 2012-12-21T16:49:14.550 回答
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
        }
    }
}

然后您将能够实际保存对文件的更改,并在第一次运行后写入新文件。

于 2012-12-21T16:33:41.303 回答
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);
 ....

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

于 2012-12-21T16:33:52.580 回答