Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 319
  • Last Modified:

File Changed Event in VB.NET

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
bpyeo
Asked:
bpyeo
  • 4
  • 2
1 Solution
 
RonaldBiemansCommented:
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
 
bpyeoAuthor Commented:
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
 
RonaldBiemansCommented:
Could to explain what doesn't work, do you get an error message, if so where and what.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
bpyeoAuthor Commented:
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
 
RonaldBiemansCommented:
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
 
RonaldBiemansCommented:
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.

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