Looking for contents in a file every minute

  • Thread starter Thread starter Andy B
  • Start date Start date
Hello Andy ,

If you want an event driven aproach go for the file system watcher as this
can give you an event when a change took place in a file
so also when there are 2 changes within a minute you get 2 change events .

Ofcourse you could also just use a timer , read the file in a string
variabel and compare the 2 strings if the 2 strings are not the same the
file has changed
however this wil cost you more CPU / IO cycles


Use the filesystem watcher to get notified when a change on the file took
place , and then reread / process the file
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

in the link i provided ( also in your previous post ) there is example code
included
in case you missed it


Public Class Watcher

Public Shared Sub Main()

Run()

End Sub

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Private Shared Sub Run

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

Michel Posseth [MCP]
http://www.vbdotnetcoder.com
 
I need to look for things inside the file every minute even if the file
hasn't changed..
Michel Posseth said:
Hello Andy ,

If you want an event driven aproach go for the file system watcher as this
can give you an event when a change took place in a file
so also when there are 2 changes within a minute you get 2 change events .

Ofcourse you could also just use a timer , read the file in a string
variabel and compare the 2 strings if the 2 strings are not the same the
file has changed
however this wil cost you more CPU / IO cycles


Use the filesystem watcher to get notified when a change on the file took
place , and then reread / process the file
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

in the link i provided ( also in your previous post ) there is example
code included
in case you missed it


Public Class Watcher

Public Shared Sub Main()

Run()

End Sub

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Private Shared Sub Run

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

Michel Posseth [MCP]
http://www.vbdotnetcoder.com







Andy B said:
What would i use to look for changes in a file every minute?
 
I need to look for things inside the file every minute even if the file
hasn't changed..


Hello Andy ,
If you want an event driven aproach go for the file system watcher as this
can give you an event when a change took place in a file
so also when there are 2 changes within a minute you get 2 change events .
Ofcourse you could also just use a timer , read the file in a string
variabel and compare the 2 strings if the 2 strings are not the same the
file has changed
however this wil cost you more CPU / IO cycles
Use the filesystem watcher to get notified when a change on the file took
place , and then reread / process  the file
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
in the link i provided ( also in your previous post ) there is example
code included
in case you missed it
Public Class Watcher
   Public Shared Sub Main()
        Run()
   End Sub
   <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
   Private Shared Sub Run
     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

- Show quoted text -

Hi,
You can use a Timer with 60000-milisecond intervals without needing to
raise changed events. However you need to determine what you really
mean by calling "inside of file" and what you want to look for, for
example, if you're just intending to check a file's LastAccessTime,
you can try to use that:

Untested:

'-----------------------------------------------------
' File to check in every 60 seconds
Dim myfile As New FileInfo("c:\file.exe")

' Optional ArrayList to log LastAccessTime
Dim logArrList As New ArrayList

' Assuming your timer's interval is 60000 ms
Private Sub Timer1_Tick(ByVal sender As Object, _
ByVal System.EventArgs) Handles Timer1.Tick

' Preferably add the last entry to an ArrayList
' to log item as DateTime type

logArrList.Add(myfile.LastAccessTime)

End Sub
'--------------------------------------------------------


Note that, with the code above, the LastAccessTime will be added your
ArrayList eventhough your file's LastAccessTime doesn't change. But
you must be sure to use that because of consuming excessive I/O cycle
and system resources in every 1 minute.

Hope this helps,

Onur Güzel
 
I need to look for things inside the file every minute even if the file
hasn't changed..
Michel Posseth said:
Hello Andy ,
If you want an event driven aproach go for the file system watcher as this
can give you an event when a change took place in a file
so also when there are 2 changes within a minute you get 2 change events .
Ofcourse you could also just use a timer , read the file in a string
variabel and compare the 2 strings if the 2 strings are not the same the
file has changed
however this wil cost you more CPU / IO cycles
Use the filesystem watcher to get notified when a change on the file took
place , and then reread / process  the file
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
in the link i provided ( also in your previous post ) there is example
code included
in case you missed it
Public Class Watcher
   Public Shared Sub Main()
        Run()
   End Sub
   <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
   Private Shared Sub Run
     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

You should be able to make the assumption that what you have is
correct (as the file hasn't changed) if the FileSystemWatcher hasn't
told you otherwise.

Thanks,

Seth Rowe [MVP]
http://sethrowe.blogspot.com/
 
I need to look for things inside the file every minute even if the file
hasn't changed..

Huh !? why would you do so ,why would a program need to reread the same
values every minute ???
hint : if the contents / values in the file change the filesystem watcher
would raise an event

HTH
Michel






Andy B said:
I need to look for things inside the file every minute even if the file
hasn't changed..
Michel Posseth said:
Hello Andy ,

If you want an event driven aproach go for the file system watcher as
this can give you an event when a change took place in a file
so also when there are 2 changes within a minute you get 2 change events
.

Ofcourse you could also just use a timer , read the file in a string
variabel and compare the 2 strings if the 2 strings are not the same the
file has changed
however this wil cost you more CPU / IO cycles


Use the filesystem watcher to get notified when a change on the file took
place , and then reread / process the file
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

in the link i provided ( also in your previous post ) there is example
code included
in case you missed it


Public Class Watcher

Public Shared Sub Main()

Run()

End Sub

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Private Shared Sub Run

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

Michel Posseth [MCP]
http://www.vbdotnetcoder.com







Andy B said:
What would i use to look for changes in a file every minute?
 
Back
Top