C# 搜索word中的多个文件,并在单击事件中将其替换为单个word

C# 搜索word中的多个文件,并在单击事件中将其替换为单个word,c#,C#,我需要搜索日志文件中的单词,如文件中的“INFO”,“ERROR”,“FATAL”,并需要将其替换为复选框上的单词“DEBUG”。如果我取消选中该框,则“DEBUG”中的单词应替换为原始状态,如“INFO”,“ERROR”e.t.c 我尝试使用File.Replace()方法。但它有助于只搜索和替换一个单词。我不知道怎么处理它。另外,如何保存文件的上一个状态 我使用了下面的代码。但在某个地方我犯了一个错误 private void ToggleforDebugMode(bool IsDebug)

我需要搜索日志文件中的单词,如文件中的
“INFO”
“ERROR”
“FATAL”
,并需要将其替换为复选框上的单词
“DEBUG”
。如果我取消选中该框,则
“DEBUG”
中的单词应替换为原始状态,如
“INFO”
“ERROR”
e.t.c

我尝试使用
File.Replace()
方法。但它有助于只搜索和替换一个单词。我不知道怎么处理它。另外,如何保存文件的上一个状态

我使用了下面的代码。但在某个地方我犯了一个错误

private void ToggleforDebugMode(bool IsDebug)
{
    string text = @"C:\Program Files (x86)\Hi.config";
    string filePath = Path.GetDirectoryName("Hi.config") + fileName;
    text = File.ReadAllText(@"C:\Program Files (x86)\Hi.config");
    if (IsDebug)
    {
        _previousState = text.Contains("WARN") ? "WARN" : "INFO";

        if(text.Contains("WARN"))
        {
            text = text.Replace("WARN", "DEBUG");
        }
        else if (text.Contains("DEBUG"))
        {
            text = text.Replace("INFO", "DEBUG");
        }               

    }
    else
    {
         text = text.Replace("DEBUG", _previousState);
    }
    File.WriteAllText(@"C:\Program Files (x86)\Galileo Print Manager .NET\GPM_Service.exe.config", text);
}

无法评论,所以请写一个答案。你的陈述是错误的:

else if (text.Contains("DEBUG"))
应该是:

else if (text.Contains("INFO"))

我假设您的文本不同时包含
“警告”
“信息”
。如果是这样的话,
previousState
这件事就行不通了。

我不明白为什么这个问题会得到反对票,这是一个有趣的问题,因为它提出了一个概念,可以对未来有相同或类似问题的读者有用

@Priya,我创建了这个方法,用一个特定的单词替换你指定的所有单词

在本例中,
“致命”、“错误”、“警告”
替换为
“有趣”

string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Test.txt";
PriyaMethod(path, true, "FUNNY", "FATAL", "ERROR", "WARN");
另外,正如您所看到的,我使用
字符串
保存文件内容的先前状态,以便在需要恢复时调用


汇编新内容:

string NewContent = String.Empty; // Content without selected line

// Assembly new content
foreach(string Line in Lines) NewContent += Line + "\n";

//Or

// Assembly new content
foreach(string Line in Lines) NewContent += String.Format("{0}{1}", Line, "\n");

只需创建字符串数组,并使用
for
foreach
或其他迭代方法。为什么人们会标记downvote,这个问题有什么问题?同意,我不明白为什么会被否决。Priya,请检查我的回答是的,谢谢。无论如何,如何在一个文件中搜索多个单词。在else if部分,我只检查一个单词。如果文本不是很大,我只会在内存中保留两个副本。比如
var text=File.ReadAllText(@“C:\Program Files(x86)\Hi.config”);var replacedText=text.Replace(“警告”、“调试”).Replace(“信息”、“调试”)
并基于IsDebug标志返回文本或replacedText。肯定有更多的最优解决方案,但这非常简单。赫克托,这段代码可以工作。但我无法还原到初始值,因为对象“路径”中的值被刷新,即使我们通过读取文件而不执行该方法来保存数据。@Priya为什么不尝试使用
用户设置保存它们?谢谢你,赫克托。在阅读文件内容时,有没有办法跳过某一行。@Priya当然,看看我的帖子,我补充道this@Priya我希望它能帮助你
string[] Lines = System.IO.File.ReadAllLines(FilePath);

int LinePosition = 0; // First line

Lines[LinePosition] = String.Empty // Delete selected line
string Content = System.IO.File.ReadAllText(FilePath);

string[] Lines = Content.Split('\n');

int LinePosition = 1; // Second line

Lines[LinePosition] = null // Delete selected line
string NewContent = String.Empty; // Content without selected line

// Assembly new content
foreach(string Line in Lines) NewContent += Line + "\n";

//Or

// Assembly new content
foreach(string Line in Lines) NewContent += String.Format("{0}{1}", Line, "\n");