【问题标题】:Are there a way to detect text file changes on its content? [duplicate]有没有办法检测其内容的文本文件更改? [复制]
【发布时间】:2014-06-04 08:29:50
【问题描述】:

我有将错误写入文本文件的程序,当该程序捕获错误时,会将其附加到文本文件中,当程序写入错误时,我想让小程序从文本文件中一一检测错误.

我是这样用的:

string ErrorsFilePath = @"D:\A.txt"; // example path
long oldLength = 0;
long newLength = 0;
while (true)
{
   FileInfo fi = new FileInfo(ErrorsFilePath);
   newLength = fi.Length;
   if (newLength > oldLength)
   {
      GC.Collect();
      string txtAllErrors = File.ReadAllText(ErrorsFilePath);
      int startIndex = (int)oldLength;
      int length = (int)(newLength - oldLength);
      ErrorDetected(txtAllErrors.Substring(startIndex, length));
      oldLength = newLength;
   }
   Thread.Sleep(10);
   GC.Collect();
}

有没有办法检测文本文件内容的更改?,当文本文件更改时会触发 Like 事件,并给我不同的文本更改。

【问题讨论】:

标签: c#


【解决方案1】:

您可以为此使用 FileSystemWatcher 实例。

http://msdn.microsoft.com/en-US/en-en/library/system.io.filesystemwatcher.aspx

你为什么这么频繁地调用 GC.Collect?

【讨论】:

  • 我使用 CG.Collect 因为它可能会在循环过程中清除内存中的任何相关数据。感谢您的解决方案...
  • 你应该让系统决定何时收集内存至少你有充分的理由,这似乎不是一个好理由。如果你想保留内存,而不是调用 GC.Collect,使用 StringBuilder 而不是字符串连接。
  • 你说得对。非常感谢...
【解决方案2】:

FileSystemWatcher 类将为您提供您需要的部分内容 - 它会在文件更改时触发事件。看这里:

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2022-11-22
    • 2019-08-17
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多