Daten in Textdatei schreiben (mit Offset)

Fox90

Grünschnabel
Hi Leute,

ich hab ein Problem und hoffe Ihr könnt mir helfen. Also ich hab 3 Textdateien in denen Daten stehen und diese Daten lese ich ein, danach möchte ich diese Daten in eine neue Textdatei schreiben, dass Problem ist, dass ich nicht einfach mit "ios:app" arbeiten kann, da ich das ganze später mit MPI umsetzen will, d.h. später schreiben 3 Prozesse diese Daten in die Textdatei, aber unabhängig von der Reihenfolge. Deshalb nun meine Frage, gibt es eine Art "seekg" oder "seekp" auch für Textdateien? Da der untere Code nicht funktioniert :(.

Code:
void writeDataBack( int rank, int chunkSize, char *content )
{
  ofstream ofile;
  int contentLen = strlen( content );
  int offset = rank*chunkSize;
  
  ofile.open( OUTPUTFILE, ios::out );  
  if( !ofile ) cout << "Datei konnte nicht geöffnet werden!" << endl;
  else
  { 
      ofile.seekg( offset, ios::beg );
      cout << "Offset: " << offset << endl;
      ofile.write( (char*)content, contentLen );
  } 
  
  ofile.close();    
}

Beispiel dazu:

Input:
textDatei1.txt: enthält "AAAAAAAA", rank = 0, chunkSize = 8
textDatei2.txt: enthält "BBBBBBBB", rank = 1, chunkSize = 8
textDatei3.txt: enthält "CCCCCCC", rank = 2, chunkSize = 8

Output:
textDatei4.txt: enthält "AAAAAAAABBBBBBBBCCCCCCC"

Das lesen klappt bereits wunderbar, nur das schreiben macht Probleme. Bitte helft mir! :)
 
Hat sich erledigt, "seekg" klappt wunderbar. Hatte nur vergessen die Datei nachdem was geschrieben wurde auch wieder als "ios::in" zu kennzeichen^^ und natürlich kein ofstream sonder fstream, das war noch nen Schreibfehler meinerseits.

Code:
void writeDataBack( int rank, int chunkSize, char *content )
{
  fstream ofile;
  int contentLen = strlen( content );
  int offset = rank*chunkSize;
  
  ofile.open( OUTPUTFILE, ios::out | ios::in );  
  if( !ofile ) cout << "Datei konnte nicht geöffnet werden!" << endl;
  else
  { 
      ofile.seekg( offset, ios::beg );
      cout << "Offset: " << offset << endl;
      ofile.write( (char*)content, contentLen );
  } 
  
  ofile.close();    
}
 

Neue Beiträge

Zurück