Textdatei überwachen!?



  • sehen sie ....problem erkannt.

    Die elementare aufgabe des Programmes das ich bauen will "muss" ist es aber, eine textdatei zu überprüfen. Meinetwegen eine logdatei. und wenn es veränderungen gibt ... dann sollen diese, möglichst in echtzeit angezteigt werden. Was nicht passiert ist, das Daten die dort nun drin stehen, verändert werden. Es werden nur Daten hinten dran gehängt.

    Zur verdeutlichung: Das Programm soll im Grunde genommen das selbe leisten, wie der tail-befehl in der Unix welt.

    Gruß

    Der Master



  • Mhmm...

    In Echtzeit das ist Kacke. Du könntest einen KeyboardHook darauf legen aber das Problem ist dann das die Datei z.B. mit Notepad geöffnet sein muss sonst kannste den Keylogger nicht benutzen.
    Ich denke mal du musst die Datei lesen, schließen, erneut lesen, schließen etc.
    und jedesmal dabei gucken ob sich die letzte Zeile geändert hat.
    d.h. du musst aufjedenfall die Datei öffnen und da entsteht das Problem wenn sich die Datei schon im Zugriff befindet.....

    Also ich würde mal auf andere Lösungen hoffen 😃

    sorry

    Hellsgore



  • nein, so kann das nicht funktionieren. eben weil ein zugrif von mehreren erfolgen muss. ....hmmm....ich hoffe hier hat noch einer eine andere lösung

    MFG

    Master



  • Nur mal so ne Frage...

    um welchen Dateityp handelt es sich? ist es ne Datenbank?

    Hellsgore



  • nein es handelt sich ausschließlich um Textdateien (.txt, .dat, ect. )



  • Leute, Leute

    FindFirstChangeNotification



  • *g*
    stimmt das gibs auch noch
    aber leider nix dafür er will ja noch lesen was geändert worden ist......

    Hellsgore



  • eben .... und ich muss die geänderten Daten auch noch anzeigen lassen und das am besten noch in Echtzeit...

    sprich.....prog schreibt log.....
    mein Prog zeigt im selben moment die neuen einträge des log´s

    Gruß Master



  • Alles viel zu umständlich.

    Win gibt eine Nachricht rüber wenn die Datei aktualisiert / geändert wurde.
    Also brauchst du nur auf die Nachricht warten und dann reagieren.

    Code Schnispsel und genaueres folgt wenn ich abens zuhause bin.



  • das wäre nicht schlecht. bitte daran denken, das es angezeigt werden muss, welche daten dazu gekommen sind.
    Ich suche mir die anforderungen ja nicht aus.



  • 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