Verzeichnis überwachen
-
Hi,
ich würde gerne einen Thread schreiben, der ein Verzeichnis (und seine Unterverzeichnisse) überwacht und mir die Veränderungen in einer Liste anzeigt. Dazu habe ich in der MSDN die Funktion FindFirstChangeNotification() gefunden. Ich könnte also in meinem Thread schreiben:HANDLE hNotify; hNotify = FindFirstChangeNotification( TEXT("C:\\Windows"), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME ); WaitForSingleObject(hNotify, INFINITE); // Benachrichtige einen anderen Thread while( FindNextChangeNotification(hNotify) ) { WaitForSingleObject(hNotify, INFINITE); // Benachrichtige einen anderen Thread } FindCloseChangeNotification(hNotify);
Dabei habe ich aber ein Problem. Erstens weiß ich nicht, WAS wirklich passiert ist, wenn ich eine Rückmeldung bekomme, und zweitens weiß ich nicht, wie ich den Thread anhalten könnte. Also
1. Wie bekomme ich heraus, was in dem Verzeichnis überhaupt passiert ist? 2. Welche Wartefunktion kann ich einsetzen, die evtl. noch auf ein anderes Ereignis wartet als eine ChangeNotification oder ein TimeOut, damit ich den Thread stoppen kann?
Freue mich über Antworten.
Hintergrund: Ich habe ein ListView, das aussieht, wie die Detailansicht im Explorer, außer, dass noch eine Spalte darin ist, die das Verzeichnis angibt, in dem sich das entsprechende File befindet. Aber alle Files, die dort angezeigt werden, gehören zu einem bestimmten Stammverzeichnis. Also, wenn das Stammverz. z.B. "C:\Windows" ist, dann gibt es da z.B. auch Dateien in "C:\Windows\System32". Ich möchte nun mit diesem ListView auf dem neuesten Stand sein. Wenn also z.B. ein File gelöscht wird, soll die jeweilige Zeile im ListView verschwinden. Deswegen muss ich genau wissen, was in "C:\Windows" nun wirklich passiert ist.
-
Wenn du den Thread mit
unsigned long _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist );
gestartet hast. Kannst du ihn mit
void _endthread( void );
von "außen" beenden.
Hast du ihn mit CreateThread gestartet solltest du ihn mit ExitThread
von außen abbrechen.Grüße
Christian
-
-
-
keine Ahnung, aber evtl. müsstest du dann das Verzeichnis selber durchgehen, was aber sicher sehr aufwendig und zeitintensive wäre