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回実行すると、テキストファイルは正常に更新されます。これを2回実行すると、テキストボックスが再更新され、新しいファイルが更新されたと表示されます。

このメソッドは、最初に実行した後、置き換えるテキストが見つからないことを期待しています。

4

3 に答える 3

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;
        }
    }
}
于 2012-12-21T16:49:14.550 に答える
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 に答える
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 に答える