Probleme mit Verzeichnis überwachen
-
Hey @all,
ich habe hier folgendes Programm
#define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT 0x501 #include <windows.h> #include <stdio.h> #include <winbase.h> void WatchDir() { for(;;) { BOOL bResult; HANDLE hDir; BYTE Buf[10000]; DWORD RetBytes; FILE_NOTIFY_INFORMATION *pInfo; DWORD i = 0; WCHAR FileName[1000]; hDir = CreateFile( L"C:\\OracleTest\\oracle\\flash_recovery_area\\WWGDCF\\BACKUPSET", FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); bResult = ReadDirectoryChangesW( hDir, Buf, 10000, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME // Löschen, Erstellen oder Umbenennen | FILE_NOTIFY_CHANGE_DIR_NAME // Löschen oder Erstellen oder Umbenennen eines Verzeichnisses | FILE_NOTIFY_CHANGE_SIZE // Größe ändert sich | FILE_NOTIFY_CHANGE_LAST_WRITE // Dateizeit Letzte Änderung | FILE_NOTIFY_CHANGE_ATTRIBUTES // Attribute geändert | FILE_NOTIFY_CHANGE_LAST_ACCESS // Dateizeit Letzter Zugriff (auch Lesen) | FILE_NOTIFY_CHANGE_CREATION // Dateizeit Erstellungsdatum ändert sich | FILE_NOTIFY_CHANGE_SECURITY, &RetBytes, NULL, NULL); for(;;) { pInfo = (FILE_NOTIFY_INFORMATION *)&Buf[i]; switch(pInfo->Action) { case FILE_ACTION_ADDED: wprintf(L"file added: "); break; case FILE_ACTION_REMOVED: wprintf(L"file deleted: "); break; case FILE_ACTION_MODIFIED: wprintf(L"time stamp or attribute changed: "); break; case FILE_ACTION_RENAMED_OLD_NAME: wprintf(L"file name changed - old name: "); break; case FILE_ACTION_RENAMED_NEW_NAME: wprintf(L"file name changed - new name: "); break; default: wprintf(L"unknown event: "); } lstrcpyn(FileName, pInfo->FileName, pInfo->FileNameLength / sizeof(WCHAR) + 1); FileName[pInfo->FileNameLength / sizeof(WCHAR) + 1] = '\0'; wprintf(L"%s\n", FileName); if(pInfo->NextEntryOffset == 0) break; i += pInfo->NextEntryOffset; }; CloseHandle(hDir); } } int main() { WatchDir(); return 0; }Mein Problem ist nun das ich nicht alleEvents abfange...
Beispiel: Ich füge 15 Dateien hinzu (je 10 KB) von 01.dat bis 15.dat
dann bekomme ich 15 file added Nachrichten.
Beim löschen der 15 Dateien bekomme ich jedoch nur ca. 5 - 13 Meldungen... Woran liegt das?Hier mal die Ausgabe:
file added: 01.png time stamp or attribute changed: 01.png time stamp or attribute changed: 01.png time stamp or attribute changed: 01.png file added: 02.png time stamp or attribute changed: 02.png time stamp or attribute changed: 02.png time stamp or attribute changed: 02.png file added: 03.png time stamp or attribute changed: 03.png time stamp or attribute changed: 03.png time stamp or attribute changed: 03.png file added: 04.png file added: 05.png time stamp or attribute changed: 05.png time stamp or attribute changed: 05.png time stamp or attribute changed: 05.png file added: 06.png time stamp or attribute changed: 06.png time stamp or attribute changed: 06.png time stamp or attribute changed: 06.png file added: 07.png time stamp or attribute changed: 07.png time stamp or attribute changed: 07.png time stamp or attribute changed: 07.png file added: 08.png time stamp or attribute changed: 08.png time stamp or attribute changed: 08.png time stamp or attribute changed: 08.png file added: 09.png time stamp or attribute changed: 09.png time stamp or attribute changed: 09.png time stamp or attribute changed: 09.png file added: 10.png file added: 11.png time stamp or attribute changed: 11.png time stamp or attribute changed: 11.png time stamp or attribute changed: 11.png file added: 12.png file added: 13.png time stamp or attribute changed: 13.png time stamp or attribute changed: 13.png time stamp or attribute changed: 13.png file added: 14.png file added: 15.png time stamp or attribute changed: 15.png time stamp or attribute changed: 15.png time stamp or attribute changed: 15.png file deleted: 01.png file deleted: 04.png file deleted: 05.png file deleted: 06.png file deleted: 07.png file deleted: 08.png file deleted: 09.png file deleted: 10.png file deleted: 11.png file deleted: 12.png file deleted: 13.png file deleted: 14.png file deleted: 15.pngHoffe mir kann jemand helfen...
Vielen Dank im Voraus
Lg _freeze_
-
Rufe CreateFile () nur einmal vor Eintritt in die äussere for-Schleife auf. Ebenso CloseHandle () nur einmal erst nach Verlassen der äusseren for-Schleife.