2014-09-24 99 views
1

我需要監視一個文件夾以查看何時創建新文件,然後處理該文件並將其存檔。檢查文件夾中的新文件

它的實際檢測新文件,我正在努力...我明白,我需要在看FileSystemWatcher的東西,但想知道是否有人知道它的用法的任何例子,以這種方式讓我開始了嗎?

說我的文件夾是「C:\ Temp \」,我需要知道任何帶有「.dat」擴展名的文件。

對不起,模糊的問題,我只是沒有能夠找到我正在尋找與各種谷歌搜索。

在此先感謝

回答

2

您可以使用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 
+2

由於您所做的只是從MSDN複製代碼,您可能已*至少*修改它以更準確地應用於OP的問題。 – Plutonix 2014-09-24 12:33:21

+0

感謝Neethu Soman,但這些似乎正在尋找命令行參數。如果可能,我想對目錄進行硬編碼。 你知道我會如何修改上述內容嗎? 謝謝! – John 2014-09-24 13:07:17

+0

現在試試這個更新的代碼,我出去了。 – 2014-09-24 13:20:37

0

所以我設法得到這個工作,我怎麼想和揣摩櫃面同樣的事情後,有人是有史以來我會分享它。

使用本指南[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分鐘的時間間隔通過計時器啓動並處理列表框中的條目(如果找到)。

+2

您很可能在使用此代碼時遇到問題。您的FileSystemWatcher運行在與UI不同的線程上,因此當您引用ListBox時,事情可能會分崩離析。你需要設置'SynchronizingObject'屬性來避免它。 – Plutonix 2014-09-24 16:32:57