Textdatei überwachen!?



  • Ich habe auch eine Idee, die fast an Realtime rankommt!
    Es gibt in der WinApi(tut mir leid, ich weiß dass es das MFC-Forum ist) für das NTFS-Dateisystem ein Befehl, der alle Änderungen an Ordnern überwacht. Dazu zählt auch das verändern von Dateien. Entweder du baust dir einen solchen selbst oder du suchst den Apiaufruf.



  • Lutz schrieb:

    Ich habe auch eine Idee, die fast an Realtime rankommt!
    Es gibt in der WinApi(tut mir leid, ich weiß dass es das MFC-Forum ist) für das NTFS-Dateisystem ein Befehl, der alle Änderungen an Ordnern überwacht. Dazu zählt auch das verändern von Dateien. Entweder du baust dir einen solchen selbst oder du suchst den Apiaufruf.

    Schön das du eine Idee hast aber diese habe ich bereits gepostet.

    @mastertango:
    Program startet, öffnet file und speichert den Filezeiger der letzten zeile ab.
    Nun kommt die Überwachung. Sollte hier ein Event ausgelöst werden dann File öffnen,bis zum letzten gespeicherten Filezeiger gehen, alles auslesen bis Fileende und den Zeiger wieder speichern. U.s.w.
    Warum schaust du dir eigentlich nicht den Source von tail an ?



  • So, nu der Code Schnipsel für das Überwachen auf Änderung an der Datei.
    Teil 2 der Aufgabe wie im Beitrag zuvor beschrieben lösen, fertig !

    DWORD dwWaitStatus;
    HANDLE dwChangeHandles;
    
    erg = TRUE;
    
    CStdioFile file;
    CString datei, text;
    
    	// ueberwachen der statusdatei !!
    	dwChangeHandles = FindFirstChangeNotification( m_statusverzeichnis, FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE );
    	// FILE_NOTIFY_CHANGE_DIR_NAME
    	// FILE_NOTIFY_CHANGE_LAST_WRITE
    
    	if (dwChangeHandles == INVALID_HANDLE_VALUE) 
    		{
    			ExitProcess (GetLastError());
    		}
    
    	while (erg == TRUE)
    		{
    		// Warten auf benachrictigung, das datei geändert wurde
    		dwWaitStatus = WaitForSingleObject(dwChangeHandles, INFINITE);
    
    		switch (dwWaitStatus)
    			{
    			case WAIT_OBJECT_0:
    				// aktualisierte daten lesen und reagieren !!!!!!!
    
    			AfxMessageBox("datei geändert !!");
    
    }
    
    				// Überwachung auf Nächste Änderung einstellen
    				if (FindNextChangeNotification( dwChangeHandles) == FALSE)
    					ExitProcess(GetLastError());
    
    				AfxMessageBox("datei geändert 2 !!");
    
    					}
    			break;
    
    			default:
    					// ExitProcess(GetLastError());
    				;
    			}
    
    	}
    
    	FindCloseChangeNotification( dwChangeHandles);	// überwachung aus
    



Anmelden zum Antworten