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

时间:2011-07-16 17:15:49

标签: c# .net windows

我目前希望能够循环查找特定字符串的文本文件,在我的情况下:“mp4:production /

当字符串匹配时(文件将定期更新 - 因此字符串最初不一定存在),然后可以输出其行(在文本文件中),例如,在消息框中

如何实现这一点,任何例子都将受到赞赏

3 个答案:

答案 0 :(得分:1)

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
            }
        }
    }
}

答案 1 :(得分:0)

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

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

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毫秒)。您应该根据具体情况调整时间,即您可以检查文件的频率,同时仍然保持相当小的风险,以免干扰尝试更改文件的进程。

答案 2 :(得分:0)

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