Announcement

Collapse
No announcement yet.

Verzeichnis überwachen?

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

  • Verzeichnis überwachen?

    Ich will ein Verzeichnis samt Unterverzeichnis auf Änderungen (vor allem auf neue Dateien) überwachen. Welche Möglichkeiten gibt es da? Die Funktionen die ich in der Win32-Api gefunden habe sind mal wieder mit sehr vielen Parametern ausgestattet.

    Hätte auch jemand ein kleines Beispiel für seine Lösung?

  • #2
    <html>

    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>Normale Seite ohne Titel</title>
    </head>

    <body bgcolor="#FFFFFF">

    <p>Hallo, Hier ein C/C++ Beispiel. Ob auch Unterverzeichnisse
    überwacht werden,weiß ich nicht. Mein Code könnte auch noch
    fehlerhaft sein, manchmal klappts nicht so wie ich möchte.<br>
    </p>

    <pre>
    DWORD DirChanges( LPDWORD lpdwParam )
    {
    while( TRUE )
    {
    if ( WaitForSingleObject( hWait, INFINITE ) == WAIT_OBJECT_0 )
    {
    // veränderte Datei ermitteln und irgendetwas tun
    // z.B. mit PostMessage dem Formular ein WM_COMMAND schicken
    // oder mit SendMessage auf Komponenten zugreifen
    }
    FindNextChangeNotification( hWait );
    }
    return( 0 );
    }

    HANDLE hThread = NULL;
    DWORD dwID;

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(hTread!=NULL)
    {
    FindCloseChangeNotification(hWait);
    TerminateProcess(hThread,0);
    hThread=NULL;
    }
    else
    {
    hThread = CreateThread( NULL,0,(LPTHREAD_START_ROUTINE)DirChanges,
    Handle, 0, &amp;dwID );
    hWait = FindFirstChangeNotification( &quot;c:\\temp&quot;, FALSE,
    FILE_NOTIFY_CHANGE_FILE_NAME |
    FILE_NOTIFY_CHANGE_SIZE |
    FILE_NOTIFY_CHANGE_LAST_WRITE );
    }
    }
    </pre>
    </body>
    </html&gt
    Günther

    Comment


    • #3
      // Beispiel in Delphi als Thread

      unit WatchThread;

      interface

      uses
      Classes,windows,dialogs,FileControl;

      type
      TWatch = class(TThread)
      private
      changehandle:THandle;
      watchpath : String;
      FileControl : TFileControl;
      { Private-Deklarationen }
      protected
      procedure Execute; override;
      procedure RefreshListbox;
      destructor Destroy;
      public
      constructor Create(path : String;control : TFileControl);
      end;

      implementation

      constructor TWatch.Create(path : String;control : TFileControl);
      begin
      inherited Create(False);
      watchpath:= path;
      FileControl := control;
      FreeOnTerminate := True;
      end;

      procedure TWatch.Execute;
      begin
      changehandle:=FindFirstChangeNotification(PChar(wa tchpath),FALSE,FILE_NOTIFY_CHANGE_FILE_NAME);
      if changehandle <> INVALID_HANDLE_VALUE then begin
      while True do begin // normalerweise eine Endlosschleife
      if WaitForSingleObject(changehandle,500)= WAIT_OBJECT_0 then begin
      synchronize(RefreshListbox);
      end;
      FindNextChangeNotification(changehandle);
      if Terminated then break;
      end;
      end;
      end;

      procedure TWatch.RefreshListbox;
      begin
      FileControl.update;
      end;

      destructor TWatch.Destroy;
      begin
      if changehandle<> NULL then FindCloseChangeNotification(changehandle);
      inherited Destroy;
      end;

      end

      Comment


      • #4
        Hallo,
        der angegebene Thread kommt mir sehr bekannt vor (HANSER VERLAG).
        Ich habe ihn auch schon genutzt und musste feststellen, dass unter
        Win NT nach ca. 2 Tagen ein Totalabsturz des Systems die Folge war.

        Daher suche ich jetzt eine andere Lösung, die ein bisschen länger läuft

        Comment

        Working...
        X