ReadDirectoryChangesW -> gleichzeitige Änderung mehrerer Dateien -> nicht alle Dateien werden erkannt



  • Hallo,

    ich versuche ein Verzeichnis zu überwachen. Ich verwende dazu:
    - FindFirstChangeNotification
    - ReadDirectoryChangesW
    - FindNextChangeNotification

    Wenn einzelne Dateien erstellt (bzw. ins Verzeichnis kopiert) oder gelöscht werden, dann bekommt ReadDirectoryChangesW die Dateien auch mit.

    Das Problem:
    Wenn mehrere Dateien gleichzeitig gelöscht bzw. in das Verzeichnis kopiert werden, dann kriegt ReadDirectoryChangesW nicht alle Dateien mit.

    Weiß jemand, woran das liegen könnte?

    Danke!

    HANDLE hDir = CreateFile(sDir.c_str(),
                                 FILE_LIST_DIRECTORY,
                                 FILE_SHARE_READ |
                                 FILE_SHARE_WRITE |
                                 FILE_SHARE_DELETE,
                                 0,
                                 OPEN_EXISTING,
                                 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
                                 0);
    
    HANDLE hChangeHandle = FindFirstChangeNotification(sDir.c_str(),
                                                  true,
                                                  FILE_NOTIFY_CHANGE_SIZE |
                                                  FILE_NOTIFY_CHANGE_FILE_NAME |
                                                  FILE_NOTIFY_CHANGE_DIR_NAME|
                                                  FILE_NOTIFY_CHANGE_LAST_WRITE);
    
    while(true)  
    {
      ReadDirectoryChangesW(hDir,&Buffer,sizeof(Buffer),true,
                                 FILE_NOTIFY_CHANGE_FILE_NAME |
                                 FILE_NOTIFY_CHANGE_DIR_NAME |
                                 FILE_NOTIFY_CHANGE_SIZE |
                                 FILE_NOTIFY_CHANGE_LAST_WRITE,
                                 &cbBytes,
                                 NULL,
                                 NULL);
    
    .
    .
    .
      FindNextChangeNotification(hChangeHandle);
    }
    


  • Du hast ReadDirectoryChangesW nicht richtig verstanden. Lies nochmal genau nach, wie man es verwendet. In lpBuffer können natürlich mehr als 1 Rekord pro Aufruf drin stehen.



  • Danke für den Hinweis.

    Enthält lpBuffer auch die Dateigröße ?

    Danke



  • Dipl.Inf.Student schrieb:

    Lies nochmal genau nach, wie man es verwendet.



  • Scheinbar nicht. Die Dateigröße wird nicht mitgeliefert.

    Nun, über den Dateinamen kann auch die Dateigröße manuell ermittelt werden.
    Wie kann (hier, in diesem Fall) sonst die Dateigröße ermittelt werden?
    Gibt es da eine andere Variante?

    Danke


Log in to reply