【问题标题】:A new file in the folder event文件夹事件中的新文件
【发布时间】:2014-03-22 23:46:15
【问题描述】:

有人可以帮助我了解如何构建一个 24/7 运行的软件来监听特定文件夹(例如 C:\Actions),并且每次我在该文件夹中放置一个新文件时,该软件都需要读取并处理它。

如果文件夹中没有文件,软件不应该只等待下一个文件的到来。

文件(action1.txt)内容示例(1+1)

软件正在处理(1+1),将答案(2)保存到另一个文件夹,并从“C:\Actions\”文件夹中删除文件(action1.txt)。

我知道如何读取文件并处理它..

我很难理解如何仅在文件夹中有新文件时触发软件,以及如何在不使用太多内存或导致内存泄漏的情况下 24/7 运行软件......

到目前为止,我一直以原始方式循环使用它,每 60 秒(睡眠)我正在检查文件夹中的新文件。那太没用了,也没有那么有效。

如果有人可以帮助我了解如何使其更有效,我会很高兴..

非常感谢

【问题讨论】:

  • 请不要在标题中包含语言标签,除非没有它就没有意义。标记用于此目的。

标签: c# file events file-io directory


【解决方案1】:

了解这门课http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx,你就可以开始了。它有所需的事件。

【讨论】:

  • 对不起,我是新来的,如何将其标记为已回答?
【解决方案2】:

看看FileSystemWatcher类:

侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。

已更改在指定路径中的文件或目录更改时发生。

已创建在创建指定路径中的文件或目录时发生。

【讨论】:

    【解决方案3】:

    使用FileSystemWatcher

    该页面的示例:

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = "C:\\Actions";
        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";
    
        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
    
        // Begin watching.
        watcher.EnableRaisingEvents = true;
    

    以及改变的事件:

    // Define the event handlers. 
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }
    

    不过,在使用此类时,您需要注意一些事项。它不适用于网络驱动器/UNC 路径。此外,如果您将大量文件粘贴到目录中,它会溢出 buffer,并且您可能无法为添加到文件夹中的每个文件获取事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2020-03-08
      • 1970-01-01
      相关资源
      最近更新 更多