Textdatei überwachen!?



  • Ich ahbe mal eine allgemeine Frage. Wie kann ich eine Textdatei auf veränderungen überwachen? Ich rede hier von Dateien die eine größe von mehreren MB haben. Die überprüfung müßte konstant erfolgen und es muss dann möglich sein die veränderungen anzuzeigen. (LIVE)

    Leider habe ich bisher keinen Ansatz gefunden wie ich das realisieren kann. Jedenfalls keinen der gut funktioniert. Hat jemand einen Ansatz für mich

    Gruß

    Der Master



  • Servus,

    nur mal so ne Idee (es gibt bestimmt was besseres), ich würds so machen:

    1. Progschreiben wo Dateinamen angegeben wird
    2. Schreibe Datum auslesen
    3. Datum speichern
    4. Mit nem Timer oder so dauerhaft überprüfen ob sich das Datum der Datei geändert hat

    geht so:

    m_cDeinFile;
    FILETIME createTime, accessTime, writeTime;
    
    GetFileTime(m_cDeinFile.m_hFile, createTime, accessTime, writeTime);
    writeTime.dwLowDateTime; // 32Bit
    writeTime.dwHighDateTime; // 32Bit
    

    den wert speicherst du irgendwo hin, in nen Array oder was weiss ich und vergleichst ihn in einem Timerabstand immer mit dem aktuellen.

    *winke*
    Hellsgore

    EDIT:
    Damit bekommst du aber nicht heraus was sich geändert hat. Ich glaube da kommste nitt rum die Datei auszulesen. Aber da habe ich keinen plan...



  • ja, die datei muss dann ausgelesen werden. Änderungen müssen in Echtzeit angezeigt werden und andere Programme müssen wärenddessen in diese Datei schreiben können.

    An eine Überwachung per Datum habe ich auch schon gedacht. In diesem Fall müsste ich vorher eine Kopie der Datei machen und die Änderungen protokollieren.

    Ich denke aber, das es böse knallt, wenn ich die Überwachung starte und in dem moment auf die zu überwachende Datei bereits zugegriffen wird.

    Außerdem halte ich es für eine ...naja nicht sehr feine Lösung dieses anhand des Datums zu machen

    MFG

    Master



  • Hi,

    meiner Meinung nach, ist das Datum hier die beste Lösung.
    Nur, mit einem Timer bekommst du die Daten nicht Realtime !

    Dass es böse Knallen wird, denke ich nicht. Du schreibst ja nichts in die Datei rein, sondern ließt nur infos aus !

    Du kannst dir auch die letzte Zeile der Detei merken, und beim beim nächsten Lesen überprüfen, ob sich was geändert hat ? <- Denke diese Variante ist langsamer, weil du dich immer bis ans Ende der Datei durcharbeiten musst.

    Bei paar MB denke ich macht es schon was aus !!

    Gruß



  • bleibt natürlich die Frage, wann sich das Datum ändert. Ändert sich das Datum, sobald ich ein Programm darauf zugreift, oder erst wenn etwas geändert wird, oder dann wenn ein Programm den Zugriff beendet.

    MFG

    Master



  • Gute Frage !

    Ich denke wenn die Datei geändert und geschlossen wurde !

    Gruß



  • Nenenene Moment.....
    da habt ihr aber nicht richtig geguckt..

    FILETIME createTime, accessTime, writeTime;
    

    1. Create Time == Erstellungsdatum/Uhrzeit der Datei
    2. Access Time == Datum Uhrzeit des letzten Zugriffs
    3. Write Time == Datum Uhrzeit des letzten Speichervorgangs

    Guckt mal in der MSDN unter GetFileTime da ist das ja schön erklärt..

    und irgendwo bei Codeproject gabs nen Filemanager der sowas gemacht hat....

    *winke*
    Hellsgore



  • danke Hellsgore !

    kann ich auch gebrauchen !

    Gruß



  • ok, ich schaue auf den letzten zugriff. Aber wie kann ich das so laufen lassen, das es konstant den Wert abfragt? Oder geht das nur über einen Timer?

    Dann, wenn ich sehe, die datei wird verändert, wie kann ich dann am besten die veränderungen anzeigen?

    Ich denke mir das so .... kann man hier Struktugramme zeichnen ? ..na egal ...also

    Programm startet
    Öffne datei
    lese und speichere letzte zeile
    schliesse datei
    zugriffsdatum ist "x"
    prüfe solange "x" = "x" mache nichts
    wenn "x" nicht gleich "x" dann
    öffne datei
    suche letzte Zeile
    gebe allso hinter "letzte Zeile" aus

    sooo ungefähr ......

    müste ja gehen ....das Problem ist dann nur .....es ist nicht echtzeit ...
    naja kleine verögerung müsst ich wohl immer in kauf nehmen....

    gruß Master



  • Klar haste kleine Verzögerungen.....

    aber so kannste nicht feststellen was für ne Veränderung stattgefunden hat. Was bringt dir denn wenn du die letzte Zeil ausliest??
    Sollte jemand eine Veränderung daran machen z.B. ein Zeichen durch ein anderes austauschen findet keine Änderung in der Zeichengröße oder in der Dateigröße statt.

    Ich denke mal bau nen Timer und lass das überprüfen solange es keine anderen Lösungen gibt. Wie du allerdings die Veränderung feststellst gibt wahrscheinlich ein Problem. Denn du musst ja vor der Änderung wissen wie die Datei inhaltlich ausgesehen hat und das dann mit der neuen vergleichen. So eine Art Filecompare bauen. Anders könnte ich es mir im Moment nicht vorstellen.

    *winke*
    Hellsgore



  • 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.


Log in to reply