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");