Problem mit CFile->Write(...)



  • Ich versuche gerade in Textfiles zu schreiben bin aber anscheinend an eine Grenze geraten. Jedenfalls werden in die Dateien nur Nullen eingetragen egal was ich an Write übergebe. Leider scheint das Problem durch die Dateigrösse(500k) zu entstehen denn mit kleineren Dateien funktioniert alles Problemlos.

    Dringend Hilfe gesucht.

    Danke!



  • *Die Kristallkugel aufstell*
    ...
    ...
    *Gegen die Kugel klopfe*
    ...
    ...

    ...
    ...

    ...

    *nichts zu sehen*

    Sry, wirst ein paar Infos noch nachschieben müssen 🤡



  • ok,ok 😉

    Also Ich will: mit dem CFile Member "Write" (MFC,c++) einen String ans Ende eines Files schreiben welches ca. 0.5 Mb gross ist, jedoch erzeugt der Quellcode welcher für kleinere Dateien tadellos funktioniert, nur nullähnliche Zeichen am Ende des Files!
    Ich weiss, dass ist nicht wirklich viel mehr, aber sagen Sie mir bitte, was Sie noch gern wissen möchten.



  • Zeige bitte mal genau die Stelle / die Funktion, die den String anhängt.
    Wie sicher bist Du, dass der String auch wirklich Inhalt hat? Vielleicht zunächst schrittweise mit MessageBox checken

    siehe auch:
    http://www.henkessoft.de/mfc_einsteigerbuch_kapitel3.htm



  • Erst mal, vielen Dank für Ihr Interesse! Ich habe inzwischen die Lösung für das Problem gefunden und zwar habe ich mir mal das entsprechende File mit einem Hexeditor betrachtet und festgestellt, dass am Anfang der Datei zum einem ein 0xff zu finden war und weiterhin zwischen jedem Byte ein 0x00 auftauchte, wohl so eine Art Dateischutz. Komisch dabei ist, das sich normale Texteditoren davon überhaupt nicht stören lassen, entsprechend ist das File nur halb so lang wenn ich den Inhalt markiere, in die Zwischenablage kopiere und dann den Inhalt in einer neuen Datei speichere.
    So etwas ist, mir jedenfalls, noch nicht passiert! 😉

    Nochmals vielen Dank!



  • Es scheint als ob du UNICODE Zeichen ins File schreibst...



  • ...oder das File aus UNICODE Zeichen besteht? Wäre dies eine Möglichkeit ? Und wenn ja, wie kann ich diesen Umstand geschickt umgehen? Meine Lösung zielt im Moment darauf ab, halt eben nach jedem character eine NULL (\0) zu schreiben. Leider verursacht dies ungemeinen Aufwand 😞 .
    Ich bin nach wie vor für jede Hilfe dankbar 😉



  • Ich denke der Problem liegt in der CString Klasse. Der Problem ist nämlich, dass ein CString object UNICODE oder ANSI Zeichen beinhalten kann. Du must eine Methode finden, die dein CString Objekt von UNICODE ins ANSI umwandelt. Ich weiß nicht wie das zu schaffen ist, aber versuch mal die CStringA Klasse zu benutzen anstatt der CString Klasse.

    Ich werde mich noch ein bisschen umschauen, aber versprechen kann ich nichts 😉



  • Vielen Dank für Ihre Mühen, ich habe das Problem inzwischen beseitigen können, indem ich mich von WriteString gelöst habe und wieder zum guten alten putc zurückgekehrt bin. Ich schreibe halt wirklich nach jedem Zeichen eine Null in das File und es funktioniert. Problematisch waren noch die Linefeeds die tauchen nämlich immer doppelt (einmal 0x0a f. textmode und 0x0d f. binary mode) auf. Aber das war mit einer If Anweisung auch schnell erledigt.
    Was mich zu guter letzt noch interessieren würde, wäre ob die symptomatik nun für UNICODE, MBCS o.ä. spricht.

    ...es war sehr nett mit euch! Bis bald.

    Connan


Anmelden zum Antworten