1

我需要获取包含字符串 MySettings.xru 的目录及其子目录中的所有 *.config 文件。

在找到的所有这些文件中,仅在包含字符串 MySettings.xru 的行上,我需要将文本 db001 替换为 db002。

因此,例如,如果我有:

RandomSettings.xru someOtherWords Database=db001 blah, blah, blah...
MySettings.xru Lalala Database=db001 blah, blah, blah...
YourSettings.xru Hey yo Database=db001 blah, blah, blah...

结果应该是:

RandomSettings.xru someOtherWords Database=db001 blah, blah, blah...
MySettings.xru Lalala Database=db002 blah, blah, blah...
YourSettings.xru Hey yo Database=db001 blah, blah, blah...

谢谢!

更新:自己解决了。

4

3 回答 3

1

这是我的解决方案:

string[] filePaths = Directory.GetFiles(@"C:\test\", "*.config", SearchOption.AllDirectories);

int counter = 0;
string currentFile = string.Empty;
string currentLine = string.Empty;
string updatedLine = string.Empty;

foreach (string file in filePaths)
{
    currentFile = File.ReadAllText(file);

    if (currentFile.Contains("MySettings.xru"))
    {
        counter++;
        Debug.Print("Found in " + file);

        using (StreamReader streamReader = new StreamReader(file))
        {
            while (!streamReader.EndOfStream)
            {
                currentLine = streamReader.ReadLine();

                if (currentLine.Contains("MySettings.xru"))
                {
                    updatedLine = currentLine.Replace("db001", "db002");

                    break;
                }
            }
        }

        currentFile = currentFile.Replace(currentLine, updatedLine);

        // If file is ReadOnly then remove that attribute.
        FileAttributes attributes = File.GetAttributes(file);
        if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
            File.SetAttributes(file, attributes ^ FileAttributes.ReadOnly);

        using (StreamWriter streamWriter = new StreamWriter(file))
        {
            streamWriter.Write(currentFile);
        }
    }
}
于 2012-08-23T15:33:02.443 回答
0

在上面的回答中;

string[] filePaths = Directory.GetFiles(@"C:\test\", *.config",SearchOption.AllDirectories);

指定搜索模式和搜索选项对我不起作用(无论出于何种原因)。然而,简单地提及搜索目录也可以解决问题。

string[] filePaths = Directory.GetFiles(searchDirectory);

于 2014-08-06T15:52:16.060 回答
0

将此评论仅视为提示:如果您有 Visual Studio,则可以在解决方案中包含文件夹并使用 Visual Studio 的搜索和替换功能。祝你好运

于 2018-01-16T11:20:54.503 回答