Brauche Experten-Hilfe für Datei-Bearbeitung
-
Ich verrate dir mal ein kleines Geheimnis
Wenn du eine Datei mit "UltraEdit-32" (oder einem anderen Programm) öffnest, macht es auch nichts anderes als das hier beschriebene Verfahren - es sucht sich ein möglicherweise passendes Dateiformat aus, liest die komplette Datei in den Speicher, verschiebt im Speicher einzelne Bytes und schreibt sie wieder.(und Probleme kann es dann geben, wenn der Editor dein Dateiformat falsch errät - wenn die Größe deines Textbereiches z.B. konstant sein soll und du löschst da drin etwas, verschiebt sich die ganze Dateistruktur)
-
erstmal Danke an alle !!
Öffne mit einen TFileStream-Objekt die Datei. Mit der Methode Read kannst du dann die Datei in ein char-Array einlesen und dort bearbeiten. Mit Write schreibst du dann den geänderten Inhalt zurück.
In welchen Modus die Datei geöffnet werden muß, dazu sieh dir bitte noch einmal die Hilfe an, ebenso zu den Methoden.
Schema ok?ok. Mit einen TFileStream-Objekt hab ich es auch schon versucht. Mein Problem ist das char-Array. aber danke.
Darum geht es nicht. Hier soll, insbesondere bei Anfängern, Hilfe zur Selbsthilfe gegeben werden. Es nützt Dir gar nichts, wenn wir Dir den Code vorkauen. Dadurch lernst Du überhaupt nichts.
im Prinzip richtig, doch wenn ich 'hänge' und überhaupt keine Hinweise bekomme, nützt das auch nix und es wirkt nur arrogant. Wenn ich einmal eine Lösung gefunden habe bzw. gezeigt bekommen habe, ist es kein Problem dies auf andere Situationen umzusetzen und so dann zu lernen, aber wenn man vorm nichts steht, kann man nur lernen, wie sich andere darüber 'lustig' machen.
übrigens ist nach Bearbeitung die Größe der Datei nicht relevant, muß also nicht gleich groß sein und aufwendige Prozeduren von checksummen entfallen, es gibt kein check der Bytes.
Ich wäre trotzdem dankbar, wenn ich noch etwas nähres erfahren könnte. Die Sache mit dem char, hier c, ist mir einfach unklar.TFileStream* tfs=new TFileStream("c:\\t.dat",fmOpenReadWrite); char c=1; tfs->Seek(0,FILE_BEGIN); tfs->Read(&c,sizeof(c)); . . . delete tfs;
-
Das liegt wohl daran, dass das mit dem char falsch ist. Naja, nicht direkt falsch, aber hier unbrauchbar. Das seek brauchst du auch nicht (zumindest nicht am Anfang). Du musst einen Puffer (char*) erstellen und in den dann einlesen.
TFileStream* tfs=new TFileStream("c:\\t.dat",fmOpenReadWrite); const int SIZE = 1000; // nur ein Beispiel char* c = new char[SIZE]; tfs->Read(c, SIZE); . . . delete[] c; delete tfs;Dann hast du in c die ersten 1000 Bytes deiner Datei.
-
oh super, das hilft mir weiter !!
kann ich ja dann für 1000 tfs->Size einsetzen und hab die ganze Datei oder ?
Dann die Datei in 3 Teile teilen.
1. Anfang 0 - 57 (offset ist immer gleich und ist bei 57)
2. Länge des alten Textes (auch bekannt)
3. Rest -(1+2)Dann Anfang + neuen Text + Rest speichern.
Ist der Gedanke richtig ??Nochmals vielen Dank, sollten noch Probleme auftauchen melde ich mich noch mal.
-
Ah, da ich mit char Arrays noch nichts zu tun hatte folgendes Problem.
wie lese ich einen AnsiString, der in einer Variable steht, in ein Array. In den Büchern und der Online Hilfe nehmen die immer nur text in Anführungszeichen.char x[] = "test"; funktioniert AnsiString y = "test"; char x[] = y; funktioniert nicht !! char x[] = y.c_str(); auch nicht !!
-
Schau mal nach strncpy()
-

Hab dies gefunden, ist das auch ok ??
char* x = StrNew(y.c_str());aber sehe gerade später brauche ich
strncpy()danke
-
OK, soweit funktioniert jetzt alles !!

Hab zwar mit dem offset(seek) noch etwas zu probieren. Bleibt der Zeiger bei read oder write an dem letzten Zeichen stehen das gelesen bzw. geschrieben wurde und ich muß ihn mit seek um eins vorrücken ??
Ein Problem bleibt noch. Was ist, wenn die Lägen der Daten dann kürzer oder länger sind ? Kann ich die mit TFileStream geöffnete Datei in der Göße ändern oder muß ich eine neue Datei/Stream/ oder MemoryStream erstellen ?
-
Du solltest eine neue Datei schreiben.
-
ES FUNKTIONIET !! So wie ich mir es vorgestellt habe !
super ! hast mir wirklich sehr geholfen. Und ich habe auch dabei gelernt.
Habe nun ein Beispiel, wo ich jederzeit darauf zurückgreifen kann. 
schönen Gruß an Dresden ! Ich bin in Plauen geboren.Also dann danke nochmal
