Solved

File Changed Event in VB.NET

Posted on 2004-10-12
6
302 Views
Last Modified: 2010-04-23
Hi Experts, I am currently developing an application using VB.NET to keep track of any additions, modifications and deletions of all the files and subfolders of the current watched directory. I want the application to be able to log these changes to a database. How could I define an event in VB.NET to keep track of such modifications so that it could trigger a writing process to the database?

Upon completing the writing of the changed files and/or subfolders, I want to reset them back to default so that if the application is still running, I want to detect any new changes made to these files/subfolders for the current watched directory.

Please advice.

TIA.
0
Comment
Question by:bpyeo
  • 4
  • 2
6 Comments
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 12287014
Use the filesystemwatcher class

here is a code snippet from MSDN

Public Class Watcher
   
    Public Shared Sub Main()
        Dim args() As String = System.Environment.GetCommandLineArgs()
        ' If a directory is not specified, exit the program.
        If args.Length <> 2 Then
            ' Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)")
            Return
        End If
       
        ' Create a new FileSystemWatcher and set its properties.
        Dim watcher As New FileSystemWatcher()
        watcher.Path = args(1)
        ' Watch for changes in LastAccess and LastWrite times, and
        ' the renaming of files or directories.
        watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
        ' Only watch text files.
        watcher.Filter = "*.txt"
       
        ' Add event handlers.
        AddHandler watcher.Changed, AddressOf OnChanged
        AddHandler watcher.Created, AddressOf OnChanged
        AddHandler watcher.Deleted, AddressOf OnChanged
        AddHandler watcher.Renamed, AddressOf OnRenamed
       
        ' Begin watching.
        watcher.EnableRaisingEvents = True
       
        ' Wait for the user to quit the program.
        Console.WriteLine("Press 'q' to quit the sample.")
        While Chr(Console.Read()) <> "q"c
        End While
    End Sub
     
    ' Define the event handlers.
    Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
        ' Specify what is done when a file is changed, created, or deleted.
        Console.WriteLine("File: " & e.FullPath & " " & e.ChangeType)
    End Sub    
   
    Private Shared Sub OnRenamed(source As Object, e As RenamedEventArgs)
        ' Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath)
    End Sub
   
End Class
0
 

Author Comment

by:bpyeo
ID: 12343495
I have tried to place the above code in a class module and try to instantiate from my form. It does not work. Please advice.

TIA.
0
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 12345380
Could to explain what doesn't work, do you get an error message, if so where and what.
0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:bpyeo
ID: 12357743
I did not receive any error message. I have created a button and instantiate this object with the click event. It does not have any response. Please advice.

TIA.
0
 
LVL 25

Accepted Solution

by:
RonaldBiemans earned 500 total points
ID: 12360127
Hi bpyeo,

I see, the above code was only an example on how it works you can not implement it like you did, because it is a console application.

change it to this (put the below code in a class)

Imports System.IO
Public Class Watcher

    Sub New(ByVal dir As String)

        ' Create a new FileSystemWatcher and set its properties.
        Dim watcher As New FileSystemWatcher


        watcher.Path = dir
        ' Watch for changes in LastAccess and LastWrite times, and
        ' the renaming of files or directories.
        watcher.NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
        ' Only watch text files.
        watcher.Filter = "*.*"

        ' Add event handlers.
        AddHandler watcher.Changed, AddressOf OnChanged
        AddHandler watcher.Created, AddressOf OnChanged
        AddHandler watcher.Deleted, AddressOf OnChanged
        AddHandler watcher.Renamed, AddressOf OnRenamed

        ' Begin watching.
        watcher.EnableRaisingEvents = True

        ' Wait for the user to quit the program.
    End Sub

    ' Define the event handlers.
    Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
        ' Specify what is done when a file is changed, created, or deleted.
        Console.WriteLine("File: " & e.FullPath & " " & e.ChangeType.tostring)
    End Sub

    Private Shared Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
        ' Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath)
    End Sub

End Class


and call like this

Dim x As New Watcher("c:\")

the above code now writes to the console so you will have to adjust it to your needs


I tested this and it works


0
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 12360157
The watcher now watches all files

watcher.Filter = "*.*"

if you want it to look at only files with the extension .txt then change it to

watcher.Filter = "*.txt"

or .exe

watcher.Filter = "*.exe"

etc ..

0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question