Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / ADO.NET / April 2006

Tip: Looking for answers? Try searching our database.

FileSystemWatcher does not seem to be working

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Nathan Sokalski - 22 Apr 2006 00:15 GMT
I have a directory on my site that I keep a bunch of text files in (this
directory is "/poetry/poems/"). The Application keeps the first line of each
of these files in an HttpApplicationState variable as a SortedList. When I
add or modify a file in this directory, I want to delete this
HttpApplicationState variable. I tried to do this using the following lines
of code in Global.asax.vb:

Private WithEvents poemfilewatcher As New
IO.FileSystemWatcher(HttpContext.Current.Server.MapPath("/poetry/poems/"))

Private Sub PoemDirModified(ByVal sender As Object, ByVal e As
System.IO.FileSystemEventArgs) Handles poemfilewatcher.Changed,
poemfilewatcher.Created, poemfilewatcher.Deleted
   HttpContext.Current.Application.Lock()
   HttpContext.Current.Application.Remove("poemlist")
   HttpContext.Current.Application.UnLock()
End Sub

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
   poemfilewatcher.IncludeSubdirectories = True
   poemfilewatcher.EnableRaisingEvents = True
End Sub

The Function that I use to return this SortedList, whether it is stored in
an HttpApplicationState variable or not, is the following, which is also
located in Global.asax.vb:

Public Shared Function GetPoems() As SortedList 'Key=Title, Value=File
   If HttpContext.Current.Application("poemlist") Is Nothing Then
       Dim Poems As New SortedList(New CaseInsensitiveComparer)
       Dim poemfiles As String() =
System.IO.Directory.GetFiles(HttpContext.Current.Server.MapPath("/poetry/poems/"))
       Dim poemstreamreader As System.IO.StreamReader
       Poems.Capacity = 50 'Not quite 50 poems, so call Poems.TrimToSize()
before caching
       For Each poemfile As String In poemfiles
           poemstreamreader = System.IO.File.OpenText(poemfile)
           Poems.Add(poemstreamreader.ReadLine(), poemfile)
           poemstreamreader.Close()
       Next
       Poems.TrimToSize()
       HttpContext.Current.Application.Lock()
       HttpContext.Current.Application.Add("poemlist", Poems)
       HttpContext.Current.Application.UnLock()
       Return Poems
   Else
       Return CType(HttpContext.Current.Application("poemlist"),
SortedList)
   End If
End Function

However, when I add, delete, or modify a file in the directory it does not
seem to delete the HttpApplicationState variable. Am I forgetting to do
something? Am I doing something wrong? Any help would be appreciated, or
possibly an example that mentions all the necessary & required steps. Thank
you to anyone who can give me any help with this.
Signature

Nathan Sokalski
njsokalski@hotmail.com
http://www.nathansokalski.com/

bruce barker (sqlwork.com) - 22 Apr 2006 01:03 GMT
you have a couple issues.

1) you need to dedicate a thread to the filewatcher. currently you are using
the first request thread. if no request come for a couple a seconds. request
threads come from a pool. if not reused, the thread is killed.

2) you are using HttpContext.Current. this will not be valid unless the the
event is fired while processing a request.

you should start a background thread, pass it a reference to the context,
and process the event.

-- bruce (sqlwork.com)

>I have a directory on my site that I keep a bunch of text files in (this
>directory is "/poetry/poems/"). The Application keeps the first line of
[quoted text clipped - 52 lines]
> possibly an example that mentions all the necessary & required steps.
> Thank you to anyone who can give me any help with this.
Nathan Sokalski - 22 Apr 2006 02:05 GMT
The responses that you and Peter have given me both seem like very good
advice, but like I have said, I don't really have any experience using
threads in VB.NET. This fact combined with what you have said about the
event needing to be fired while processing a request when used with ASP.NET
is making it kind of hard for me to figure out what to do about figuring out
a solution. Do you have any suggestions/ideas/recommended sites that could
help? Thanks.
Signature

Nathan Sokalski
njsokalski@hotmail.com
http://www.nathansokalski.com/

> you have a couple issues.
>
[quoted text clipped - 66 lines]
>> or possibly an example that mentions all the necessary & required steps.
>> Thank you to anyone who can give me any help with this.
Bob Lehmann - 22 Apr 2006 02:37 GMT
> The responses that you and Peter have given me
If you wouldn't post to so many irrelevant groups, someone might have a clue
as to what Peter's response was.

microsoft.public.dotnet.framework.adonet,
microsoft.public.dotnet.framework.aspnet,
microsoft.public.dotnet.framework.aspnet.buildingcontrols,
microsoft.public.dotnet.framework.aspnet.webcontrols,
microsoft.public.dotnet.general,
microsoft.public.dotnet.l -> Apparently, you've reached some sort of limit
here

Bob Lehmann

> The responses that you and Peter have given me both seem like very good
> advice, but like I have said, I don't really have any experience using
[quoted text clipped - 25 lines]
> >>
> >> Private WithEvents poemfilewatcher As New

IO.FileSystemWatcher(HttpContext.Current.Server.MapPath("/poetry/poems/"))

> >> Private Sub PoemDirModified(ByVal sender As Object, ByVal e As
> >> System.IO.FileSystemEventArgs) Handles poemfilewatcher.Changed,
[quoted text clipped - 17 lines]
> >>        Dim Poems As New SortedList(New CaseInsensitiveComparer)
> >>        Dim poemfiles As String() =

System.IO.Directory.GetFiles(HttpContext.Current.Server.MapPath("/poetry/poe
ms/"))
> >>        Dim poemstreamreader As System.IO.StreamReader
> >>        Poems.Capacity = 50 'Not quite 50 poems, so call
[quoted text clipped - 20 lines]
> >> or possibly an example that mentions all the necessary & required steps.
> >> Thank you to anyone who can give me any help with this.
Otis Mukinfus - 22 Apr 2006 17:39 GMT
>> The responses that you and Peter have given me
>If you wouldn't post to so many irrelevant groups, someone might have a clue
[quoted text clipped - 98 lines]
>steps.
>> >> Thank you to anyone who can give me any help with this.

Good Lord!  What a long string of groups!  I think he should get the over
posting award for the week!

Good luck with your project,

Otis Mukinfus
http://www.arltex.com
http://www.tomchilders.com

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.