在文本文件中循环查找字符串,匹配时返回true

本文关键字:返回 true 字符串 文件 文本 循环 查找 | 更新日期: 2023-09-27 18:02:12

我目前希望能够循环通过文本文件寻找一个特定的字符串,在我的情况下:"mp4:production/

当字符串匹配(文件将定期更新-因此字符串不一定首先出现)时,它的行(在文本文件中)可以输出,例如在消息框

这是如何实现的,任何例子将不胜感激

在文本文件中循环查找字符串,匹配时返回true

while(true) {
    Thread.Sleep(500); // lets get a break
    if(!System.IO.File.Exists(FILE_NAME)) continue;
    using (System.IO.StreamReader sr = System.IO.File.OpenText(FILE_NAME)) 
    {
        string s = "";
        while ((s = sr.ReadLine()) != null) 
        {
            if(s.Contains(TEXT_TO_SEARCH)) {
                // output it
            }
        }
    }
}

您必须反复循环并读取文件。

请注意,您需要一些错误处理,因为有时很可能由于其他进程正在写入文件而无法访问该文件。

bool found = false;
while (!found) {
  try {
    found = File.ReadAllText(fileName).Contains(searchString);
  } catch (IOException) {
    // I/O error, occurs if the file is being written.
    // Nothing to do here, just wait and retry.
  }
  if (!found) {
    Thread.Sleep(5000);
  }
}

上面的代码假设文件相当小,可以全部读入内存。如果文件非常大,你将不得不以较小的块读取它,以避免内存不足的异常。

代码在每次尝试之间等待5秒(5000毫秒)。您应该根据您的具体情况来调整时间,例如,您可以检查文件的频率,同时保持它干扰试图更改文件的进程的风险相当小。

如果您想通过调用sleep来阻塞线程,您应该首先创建一个新线程来执行文件读取。您可以使用System.Threading.Timer: http://msdn.microsoft.com/en-us/library/swx5easy.aspx