【问题标题】:FileSystemWatcher is not hitting the breakpoint while debugging in C#FileSystemWatcher 在 C# 中调试时未命中断点
【发布时间】:2014-01-29 08:13:23
【问题描述】:

我有一个包含 FileSystemWatcher 的方法来观察文本文件中的任何变化。这是我的方法。

public static void RunWatcher()
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = "D:\\CDR File";
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    watcher.Filter = "*.txt";
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.EnableRaisingEvents = true;
}

这是我从 RunWatcher() 方法调用的方法..

private static void OnChanged(object source, FileSystemEventArgs e)
{
    int totalLines = File.ReadLines(FileToCopy).Count();
    int newLinesCount = totalLines - ReadLinesCount;
    File.ReadLines(FileToCopy).Skip(ReadLinesCount).Take(newLinesCount);
    ReadLinesCount = totalLines;

    Console.WriteLine("Hello World");
    Console.ReadLine();
}

现在我在应用程序的 main 方法中调用了 RunWatcher() 方法,并在 RunWatcher() 方法中放置了一个断点。但是在调试时我无法调用 OnChanged ..这是什么问题?为什么它没有得到已调试并达到断点?

这是我根据 Hans Passant 的建议尝试的方法

        string FileToCopy = "D:\\BEML.txt";

        if (System.IO.File.Exists(FileToCopy) == true)
        {
            var fs = new FileStream(FileToCopy, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            using (var reader = new StreamReader(fs))
            {
                string line;
                string rawcdr;

                while ((line = reader.ReadLine()) != null)
                {
                }
            }
          }

【问题讨论】:

  • 当然在 OnChanged 上设置断点。该代码非常不明智,您确实不想像这样使用 FSW 来衡量复制进度。您从CopyFileEx 获得进展。希望你的 D: 驱动器不是光驱,它不能工作。
  • @HansPassant FileSystemWatcher 是为了持续检查文本文件中的更新
  • 对于每个更改通知,您正在阅读整个文件 两次。正如所写的那样,这是非常昂贵的,并且您会失去更改事件的几率非常非常。始终使用错误事件。通过使用 FileShare.ReadWrite 打开文件而不是关闭它来获得成功,这样您就不必从一开始就一遍又一遍地阅读它。请记住,在写入文件时您无法可靠地检测到文件结尾,最后一行可能是部分写入的文本行。您将其计为一行,下一次写入再次将其计为一行。
  • @HansPassant 对不起先生,但我不知道如何使用 FileShare.ReadWrite 连续使用读取文本文件。请帮助我..

标签: c# visual-studio-2010 debugging text-files filesystemwatcher


【解决方案1】:

不会从 RunWatcher 调用 OnChanged。事件处理程序的调用由运行时在后台处理。 所以需要在 OnChanged 中设置断点。

【讨论】:

  • 我检查了在 OnChanged 中设置断点并更改了文件..仍然我没有在控制台中看到输出...
  • 您是否使用调试信息构建了所有内容?没有它,您将无法设置断点。
  • 是的,我已经在调试模式下构建了解决方案。我的代码是否正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2021-09-26
  • 2016-12-21
  • 2010-11-05
  • 2013-07-16
  • 2017-10-07
  • 2011-10-11
相关资源
最近更新 更多