• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 183
  • Last Modified:

New file "event"

I want to get an "event" then a new file/update to file occurs in a directory. How can I do this?
0
manne
Asked:
manne
  • 3
1 Solution
 
dm_14Commented:
1. Use the FindNextChangeNotification and FindFirstChangeNotification
2. You can find the declarations and constants in the VB5 text viewer
3. More info available on Microsofts MSDN site
4. Here is a sample piece of code:

Private Sub Command1_Click()
Do
    Dim lDir As Long, lFound1 As Long, lFound2 As Long
    sPath = Left$(sSourceDir, Len(sSourceDir) - 1)
    lDir = FindFirstChangeNotification(sPath, False, FILE_NOTIFY_FLAGS)
    Do
      lFound1 = WaitForSingleObject(lDir, 100)
      DoEvents: If bFlag = True Then Exit Do
    Loop While lFound1 <> 0
    Do
     lFound2 = FindNextChangeNotification(lDir)
     Do
      lFound2 = WaitForSingleObject(lDir, 100)
      DoEvents
      If bFlag = True Then Exit Do
     Loop While lFound2 <> 0
     If bFlag = True Then Exit Do
     If iFound2 = 0 Then
         DoEvents
         ' -- ** Place your event code here ** --
         MsgBox "The watched directory has been changed.  Resuming watch..."
     End If
   Loop
end sub
0
 
dm_14Commented:
Correction ..
2. You can find the declarations and constants in the VB5  API text viewer
0
 
dm_14Commented:
Sorry .. The code I sent has a few errors
Here is a better example :

1. Here are the declarations you need :
(Some of the constants allow you to detect different changes to a file)

Public Const INFINITE = &HFFFF
Public Const FILE_NOTIFY_CHANGE_FILE_NAME As Long = &H1
Public Const FILE_NOTIFY_CHANGE_DIR_NAME As Long = &H2
Public Const FILE_NOTIFY_CHANGE_ATTRIBUTES As Long = &H4
Public Const FILE_NOTIFY_CHANGE_SIZE As Long = &H8
Public Const FILE_NOTIFY_CHANGE_LAST_WRITE As Long = &H10
Public Const FILE_NOTIFY_CHANGE_LAST_ACCESS As Long = &H20
Public Const FILE_NOTIFY_CHANGE_CREATION As Long = &H40
Public Const FILE_NOTIFY_CHANGE_SECURITY As Long = &H100
Public Const FILE_NOTIFY_FLAGS = FILE_NOTIFY_CHANGE_ATTRIBUTES Or _
                                 FILE_NOTIFY_CHANGE_FILE_NAME Or _
                                 FILE_NOTIFY_CHANGE_LAST_WRITE

Public Declare Function FindFirstChangeNotification Lib "kernel32" _
    Alias "FindFirstChangeNotificationA" _
   (ByVal lpPathName As String, _
    ByVal bWatchSubtree As Long, _
    ByVal dwNotifyFilter As Long) As Long

Public Declare Function FindCloseChangeNotification Lib "kernel32" _
   (ByVal hChangeHandle As Long) As Long

Public Declare Function FindNextChangeNotification Lib "kernel32" _
   (ByVal hChangeHandle As Long) As Long

Public Declare Function WaitForSingleObject Lib "kernel32" _
   (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Public Const WAIT_OBJECT_0 = &H0
Public Const WAIT_ABANDONED = &H80
Public Const WAIT_IO_COMPLETION = &HC0
Public Const WAIT_TIMEOUT = &H102
Public Const STATUS_PENDING = &H103


2. Here is the code to place in a command button :

Private Sub Command1_Click()
Do
    Dim lDir As Long, lFound1 As Long, lFound2 As Long, sPath As String
    sPath = "c:\temp1" ' *** directory to watch ***
    lDir = FindFirstChangeNotification(sPath, False, FILE_NOTIFY_FLAGS)
    Do
      lFound1 = WaitForSingleObject(lDir, 100)
      DoEvents: If bFlag = True Then Exit Do
    Loop While lFound1 <> 0
    Do
     lFound2 = FindNextChangeNotification(lDir)
     Do
      lFound2 = WaitForSingleObject(lDir, 100)
      DoEvents
      If bFlag = True Then Exit Do
     Loop While lFound2 <> 0
     If bFlag = True Then Exit Do
     If iFound2 = 0 Then
        MsgBox sPath
        MsgBox "The watched directory has been changed.  Resuming watch..."
     End If
   Loop
   lFound2 = FindCloseChangeNotification(lDir)
   
Loop
End Sub

0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now