检查文件夹中的新文件
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
属性来避免它。以上是关于检查文件夹中的新文件的主要内容,如果未能解决你的问题,请参考以下文章