Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dateien gezielt ändern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.09.2005, 21:55 Uhr
CDW



Ok, ich bin nicht wirklich C++ bewandert und brauche den folgenden Code nur als Beispiel.
Als Umgebung setze ich MS VC++ 6.0 ein, aber es sollte schon möglichst "reines C++" sein.

Ziel: ich möchte auf eine Datei zugreifen, bestimmte Stellen ändern und eben wieder schließen.
Ansatz:

C++:
#include <fstream.h>
#define OFFSET 10

char aenderung[2]={0x1,0x2};

int main() {

  fstream file ("datei.bin",ios::out | ios::binary);
  if (file.is_open())
  {
      file.seekp(OFFSET,ios::beg);
      file.write( aenderung,sizeof aenderung);
      
      file.close();
  }
  return 0;
}


dieser Code öffent zwar die Datei, aber überschreibt alles bis zu der Stelle mit 0, schreibt die Änderung rein und "schneidet" die Datei ab.
Die mir bekannten Pascal, C-Zugriffsfunktionen und WinAPI machen nichts der gleichen.

Mache ich hier also was falsch oder muss man zwingend alles selber bis zu der stelle auslesen, ändern und noch weiter auslesen und dann speichern?
Meine eigene Recherche ließt mich zwar den Code da oben schreiben, allerdings fand ich keine Beispiele, wo man eben gezielt was ändern kann (nur wie man ließt und schreibt).
--
EB FE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2005, 22:13 Uhr
~f.-th.
Gast


habe mal vor einiger zeit sowas mit einer temporären 'hilfsdatei' gemacht.
entweder orginal nach hilfsfile kopieren und neues geändertes file zusammenkopieren
oder urcode mit änderungen in hilfsdatei und diese nach getaner arbeit entsprechend
umbenennen.

mfg f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.09.2005, 08:57 Uhr
ao

(Operator)



Zitat von CDW:


C++:
  fstream file ("datei.bin",ios::out | ios::binary);




Wahrscheinlich liegts an den Flaggen, mit denen die Datei geöffnet wird. Lies mal in der Doku über fstream nach, ob du eine passende Flaggen-Kombination findest.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.09.2005, 09:38 Uhr
virtual
Sexiest Bit alive
(Operator)


std::ios:app heißt das Flag deiner Wahl: Ohne std::ios::app bewirkt std::ios::out ein Abschneiden der Datei. Also: std::ios::out|std::ios::app|std::ios::binary
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.09.2005, 10:22 Uhr
CDW




Zitat:
Also: std::ios::out|std::ios::app|std::ios::binary

das hängt dann wiederum alles ans Ende - laut Doku darf man auch nichts anderes erwarten:

Zitat:
ios::app The function performs a seek to the end of file. When new bytes are written to the file, they are always appended to the end, even if the position is moved with the ostream::seekp function.




Zitat:
Wahrscheinlich liegts an den Flaggen, mit denen die Datei geöffnet wird.

die Auswahl ist recht überschaubar , ich denke dass ich schon alles möglichen Kombinationen ausprobiert habe. Dann werde ich es wohl mit einer zweiten Datei machen müssen.
--
EB FE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.09.2005, 12:57 Uhr
virtual
Sexiest Bit alive
(Operator)


Sorrym hatte nicht richtig gelesen: std::ios::ate wäre das richtige. Kann aber sein, daß der VC 6 nicht kann, der spinnt manchmal
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.09.2005, 22:24 Uhr
CDW



da hast Du recht - es tut sich in VC absolut nichts
dann werde ich wohl mir irgendwo ein Beispiel mit auslesen und schreiben schnappen und es anpassen. Trotzdem Danke ich euch für die Antworten.
--
EB FE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: