Solved

File Changed Event in VB.NET

Posted on 2004-10-12
6
301 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
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

 

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

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

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

Suggested Solutions

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Microsoft Reports are based on a report definition, which is an XML file that describes data and layout for the report, with a different extension. You can create a client-side report definition language (*.rdlc) file with Visual Studio, and build g…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.

831 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