检查文件夹中的新文件

Posted

技术标签:

【中文标题】检查文件夹中的新文件【英文标题】:Checking for new files in a folder 【发布时间】:2014-11-18 20:29:25 【问题描述】:

我需要监视一个文件夹以查看何时创建新文件,然后处理文件并存档。

这是对我正在努力解决的新文件的实际检测...我知道我需要查看 FileSystemWatcher 的东西,但想知道是否有人知道以这种方式使用它的任何示例来帮助我入门?

假设我的文件夹是“C:\Temp\”,只要出现任何带有“.dat”扩展名的文件,我就需要知道。

抱歉这个含糊的问题,我只是无法通过各种谷歌搜索找到我正在寻找的东西。

提前致谢

【问题讨论】:

【参考方案1】:

您可以为此使用FileSystemWatcher Class:它侦听文件系统更改通知并在目录或目录中的文件更改时引发事件。

Imports System
Imports System.IO
Imports System.Diagnostics

Public watchfolder As FileSystemWatcher

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    watchfolder = New System.IO.FileSystemWatcher()
    watchfolder.Path = "d:\pdf_record\"
    watchfolder.NotifyFilter = IO.NotifyFilters.DirectoryName
    watchfolder.NotifyFilter = watchfolder.NotifyFilter Or IO.NotifyFilters.FileName
    watchfolder.NotifyFilter = watchfolder.NotifyFilter Or IO.NotifyFilters.Attributes
    AddHandler watchfolder.Changed, AddressOf logchange
    AddHandler watchfolder.Created, AddressOf logchange
    AddHandler watchfolder.Deleted, AddressOf logchange
    AddHandler watchfolder.Renamed, AddressOf logrename
    watchfolder.EnableRaisingEvents = True
End Sub


Private Sub logchange(ByVal source As Object, ByVal e As System.IO.FileSystemEventArgs)
    If e.ChangeType = IO.WatcherChangeTypes.Changed Then
        MsgBox("File " & e.FullPath & " has been modified" & vbCrLf)
    End If
    If e.ChangeType = IO.WatcherChangeTypes.Created Then
        MsgBox("File " & e.FullPath & " has been created" & vbCrLf)
    End If
    If e.ChangeType = IO.WatcherChangeTypes.Deleted Then
        MsgBox("File " & e.FullPath & " has been deleted" & vbCrLf)
    End If
End Sub

Public Sub logrename(ByVal source As Object, ByVal e As System.IO.RenamedEventArgs)
    MsgBox("File" & e.OldName & " has been renamed to " & e.Name & vbCrLf)
End Sub

【讨论】:

由于您所做的只是从 MSDN 复制代码,您可能至少对其进行了修改以更准确地应用于 OP 的问题。 感谢 Neethu Soman,但这些似乎是在寻找命令行参数。如果可能,我想对目录进行硬编码。你知道我将如何修改上述内容来做到这一点吗?谢谢!【参考方案2】:

所以我设法让它按照我想要的方式工作,并想我会分享它,以防有人追求同样的事情。

使用本指南 [http://www.dreamincode.net/forums/topic/150149-using-filesystemwatcher-in-vbnet/] 作为参考,我在表单中添加了一个 FileSystemWatcher 组件。

我使用以下代码对我要监控的目录进行硬编码:

    Public Sub agent_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown
        Fsw1.Path = "C:\temp"
    End Sub

我使用以下内容将创建的文件的完整路径添加到列表框...

Private Sub fsw1_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles Fsw1.Created
    listbox_PendingJobs.Items.Add(e.FullPath.ToString)
End Sub

就检测文件夹中的新文件而言,这完全符合我的要求。 现在我要删除一个后台工作人员,该工作人员每隔 5 分钟由一个计时器启动,以完成并“处理”列表框中的条目(如果找到)。

【讨论】:

您很可能在使用此代码时遇到问题。您的 FileSystemWatcher 在与 UI 不同的线程上运行,因此当您引用 ListBox 时,事情可能会分崩离析。您需要设置SynchronizingObject 属性来避免它。

以上是关于检查文件夹中的新文件的主要内容,如果未能解决你的问题,请参考以下文章

执行vbscript(?)代码:自动打开目录中的新文件[关闭]

获取指定路径下指定类型的文件名称,并返回可用的新名称

预发布视图中的新 iTunes 连接构建状态

如何快速监控文件夹中的新文件?

有关 Azure 文件共享上的新文件的电子邮件通知

在 Windows 中监视文件夹中的新文件