String in einer Word-Datei finden



  • Hallo,

    ich möchte eine Word-Datei nach dem Add-In-Pfad (also keinem eigentlichen Text-Teil) durchsuchen. Konkret gehts um den String "normal.dot" bzw "irgendwasanderes.dot"

    Wenn ich so eine Word-Datei mit einem einfachen Editor öffne und dort die Suchfunktion verwende, finde ich den String (sofern er vorhanden ist).

    Nun hatte ich - um klein anzufangen - mir ein paar Textdateien mit
    dem Editor erstellt und dort ein paar Wörter und auch dieses "normal.dot"
    reingeschrieben.

    Klappt soweit alles ganz prima. Nur wenn ich ein richtiges Word-Dokument mit dem Programm nach "normal.dot" suchen lassen will, kommt nur -1 zurück, obwohl dieses "normal.dot" da drin steht.

    Code-Teil zum Dateiöffnen und suchen:

    CFile file(localpath,CFile::modeRead);
    char s[800001];
    long bytesRead = file.Read(s,800000);
    s[bytesRead]=0;
    CString message=s;
    long pos1=0;
    pos1=message.Find("normal.dot");

    mit CFile::typeText klappt es auch nicht.

    Kann mir jemand einen Tipp geben, woran es liegen könnte?

    Ich würde es gern ohne OLE-Automation, wie hier:
    http://www.a-m-i.de/tips/office/officeautomation.php#cppexample_word
    machen. Oder komm ich da nicht herum?

    Vielen Dank und schönen Sonntag



  • Hallo,

    das liegt daran, weil die Datei binaer ist. Hast Du Dir den String mal
    im Debugger angesehen? Er wird nach der ersten 0 in der Datei bereits
    abgeschlossen sein. Und deswegen findest Du den Suchstring auch nicht.

    Ich würde mit einen kleineren Buffer arbeiten z.B. 1KB

    Dann den Buffer byteweise nach dem ersten Byte des Suchstrings also das 'n'
    durchsuchen. Wenn ein Byte gefunden wurde, den Filepointer auf das gefundene
    Byte in der Datei setzen und prüfen ob die restlichen Bytes Deinem String
    entsprechen. Ansonsten ab der Position im File weiter nach dem ersten Byte
    suchen.

    Hm, etwas schwierig das in ein wenig Text zu verfassen, hoffe aber, das es
    einigermaßen verständlich ist.

    Gruss
    EarlyBird



  • 1. Teil ist verständlich. Habs mit nem Hex-Editor gesehen.
    2. Teil klingt zu kompliziert. Aber trotzdem Danke. Hat mir erstmal weitergeholfen.


Anmelden zum Antworten