Announcement

Collapse
No announcement yet.

VB 2005 / FileSystemWatcher

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VB 2005 / FileSystemWatcher

    Hallo zusammen,
    Wenn mit dem FileSystemWatcher ein Festplattenverzeichnis überwache funktioniert folgender aufruf:

    IO.FileSystemWatcher(“C:\Test”)
    IO.FileSystemWatcher.EnableRaisingEvents = True

    Möchte ich ein Netzwerkverzeichnis überwachen bekomme ich einen Fehler:
    Der Fehler lautet „Unzulässige Funktion“.

    IO.FileSystemWatcher(“X:\Test”)
    IO.FileSystemWatcher.EnableRaisingEvents = True

    Laufwerk und Verzeichnis sind vorhanden. Es handelt sich um einen Novellserver, auf welchem ich ein Verzeichnis überwachen möchte.

    Was muss ich ändern, damit die Überwachung funktioniert?

  • #2
    Hallo,
    die FileSystemWatcher-Klasse aus dem .NET Framework setzt direkt auf Win32-API-Funktionen des Betriebssystems auf. Da es bei einem Novell-Server (<i>Novell Netware</i>) kein Win32-API gibt, ist dieses Feature dort nicht verfügbar.

    Sehr große Teile des .NET-Frameworks hängen direkt vom Betriebssystem Windows ab. Aus diesem Grund unterliegt zum Beispiel auch MONO sehr umfangreichen Einschränkungen

    Comment


    • #3
      AFAIK muß das Ziellaufwerk auch ein NTFS-Laufwerk sein. Mit FAT oder anderen Dateitypen funktioniert das AFAIK ebenfalls nicht

      Comment


      • #4
        Gibt es aus dem .Net eine andere Möglichkeit so etwas wie einen FileWatcher für Novell-Laufwerke zu bauen

        Comment


        • #5
          Hallo,
          es gibt an dieser Stelle nur 2 Optionen:

          1. Mit dem Novell Netware SDK wird ein Dienst geschrieben, der auf dem Novell-Server läuft und im Fall einer geänderten Datei ein UDP-Datenpaket (oder ähnliches) ins Netzwerk schickt.

          2. Die .NET-Anwendung (oder ein mit .NET geschriebener Dienst) pollt regelmäßig vom Client-Rechner aus den Novell-Server an, um die Dateieigenschaften des Verzeichnisses auszulesen und mit den vorherigen Ergebnissen zu überprüfen

          Comment


          • #6
            Ich denke für mich würde die 2. Lösung in Frage kommen.

            Aber wie meinst du das? Einen eigenen Code schreiben der eine ähnliche Funktion wie der FileWatcher hat ?

            Wie müsste ich da ran gehen. Dann funktionieren doch die Klassen IO.DirectoryInfo auch nicht....?

            Ausserdem müßte ich abfragen können ob dies ein Novelllaufwerk ist...

            Hast du nen Lösungsansatz oder evtl. sogar Code den du mir posten könntest..?

            Wäre sehr dankbar...

            Comment


            • #7
              Hallo,

              &gt;Wie müsste ich da ran gehen.

              das Programm muss in zeitlichen Abständen die folgenden Arbeiten ausführen:

              1. Programmstart: Alle Dateien des Netzlaufwerkes mit dem Zeitstempel ermitteln und in eine DataTable-Instanz (In-Memory-Tabelle, die nur im Arbeitsspeicher des Programms existiert) schreiben. Wenn der Windows-Explorer die Dateien und das Datum anzeigt, liefern auch die .NET-Klassen aus IO die Informationen zurück.

              2. Beim nächsten Lauf wird für jede Datei des Netzlaufwerkes in der DataTable geprüft, ob die Datei dort schon vorhanden ist. Wenn ja, kann der neu ausgelesen Zeitstempel mit dem in der DataTable gespeicherten alten Wert verglichen werden. Wenn es einen Unterschied gibt, hat sich die Datei geändert

              Comment


              • #8
                Ok... Danke, für den Ansatz... das sieht ganz plausibel aus...

                Aber gibt es eine Möglichkeit festzustellen ob ich eine Novelllaufwerk anspreche oder nicht..

                Comment


                • #9
                  Hallo,

                  &gt;...Möchte ich ein Netzwerkverzeichnis überwachen bekomme ich einen Fehler...

                  der schmutzige Weg wäre, im Fall einer Fehlermeldung von einem Novell-Laufwerk auszugehen :-

                  Comment


                  • #10
                    Hallo ich habe ein sehr ähnliches Problem:

                    ein server schreibt eine log datei.
                    ich habe ein programm geschrieben das via filewatcher schaut ob sich etwas geändert hat.
                    wenn dies der fall ist lsit er die datei ein und gibt mir die neue zeite zurück.
                    klappt auch wunderbar... jedenfalls beim ersten durchlauf.. beim zweiten sagt er das die datei von einem anderen prozess genutzt wird.
                    Lese ich die Datei aber manuell über einen button ein (auch mehrfach) ist es kein problem... was mache ich falsch hier der code:

                    Private Sub DateiGeaendert(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileWatcher.Changed
                    If e.FullPath = InputPfad Then

                    ' Try
                    Dim Zeile As String
                    Dim myStreamReader As IO.StreamReader

                    SyncLock Me
                    myStreamReader = IO.File.OpenText(InputPfad)
                    Zeile = ""
                    While myStreamReader.Peek <> -1
                    Zeile = myStreamReader.ReadLine
                    End While
                    myStreamReader.Close()
                    myStreamReader.Dispose()
                    myStreamReader = Nothing
                    End SyncLock


                    MeldungAufteilen(Zeile)
                    ' Catch ex As Exception
                    ' MsgBox(ex.Message, MsgBoxStyle.Exclamation)
                    ' End Try

                    End If
                    End Sub

                    der fehler entsteht dann beim zweiten oder dritten durchlauf schon beim versuch die datei zu öffnen... wäre toll wenn da einer eine lösung weiß

                    Comment


                    • #11
                      Ohne das jetzt probiert zu haben, gehe ich davon aus das du mit dem öffnen der Datei den FileSystemWatcher wieder auslöst...

                      ... also die Datei wahrscheinlich von deinem eigenen Prozess noch offen ist und das du dich dann selbst blockierst....

                      Comment


                      • #12
                        vielleicht wird beim automatischen lesen der Reader nicht richtig geschlossen und somit noch auf die Datei zugegriffen?
                        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                        Comment

                        Working...
                        X