Eine Binärdatei mit "0" füllen?!?!

Alles rund um die Programmierung mit Qt
Antworten
PeterPan200
Beiträge: 18
Registriert: 19. März 2007 22:20

Eine Binärdatei mit "0" füllen?!?!

Beitrag von PeterPan200 »

Hallo Leute!
Ich habe "eigentlich" en einfaches Problem...kriege es aber nicht hin :-(!!!
Ich habe eine *.bin Datei und möchte die Datei komplett mit Nullen füllen.

Code: Alles auswählen

QString file = QFileDialog::getSaveFileName(inputPath, "BIN (*.bin)", this);
if ( !file.isNull() ) 
{
  QFile fileName(inputPath);		
  if(fileName.open(IO_WriteOnly))		
   {	int fileSize = 23154;
	QDataStream stream(&fileName);
	static char bytes[] = {0};
	stream.writeRawBytes((char*) bytes ,fileSize);
   } 
}
Zwar füllt er die Datei mit Nullen, aber nicht komplett! Die Datei ist anschließend kleiner als "fileSize", was eigentlich nicht sein darf! Was mache ich falsch??

Für Tipps wäre ich Euch sehr dankbar!!

MfG
Peter
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

   static char bytes[] = {0};
   stream.writeRawBytes((char*) bytes ,fileSize);
Sei froh das es nicht crasht... warum das kannst du Dir selbst überlegen :)

Bitte in einer Loop machen

Code: Alles auswählen

for(int i = 0; i < fileSize; i++)
  stream.writeRawBytes(bytes, 1);
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterPan200
Beiträge: 18
Registriert: 19. März 2007 22:20

Beitrag von PeterPan200 »

Vielen Dank Christian81!
Es hat funktioniert! Jetzt würde ich ganz gerne wissen wie man einen bestimmten Bereich verändern kann??

1. Als Erstes schreibe ich die Daten in die *.bin Datei

Code: Alles auswählen

QString file = QFileDialog::getSaveFileName(inputPath, "BIN (*.bin)",this);
if ( !file.isNull() ) 
 {
	QFile fileName(inputPath);
	if(fileName.open(IO_WriteOnly))	
	{
		QDataStream stream(&fileName);
		stream.writeRawBytes((char*) m_pftr, fileSize);
                //m_pftr ist ein Objekt
	}
	fileName.close();
 }
2. Jetzt möchte ich einen Bestimmten Bereich der gefüllten Daten verändern bzw. ersetzen!

Code: Alles auswählen

if(fileName.open(IO_WriteOnly))
{
	QDataStream stream(&fileName);
	static char bytes[] = {0};
	for(int i = 382147; i < fileSize; i++)
	{
		stream.writeRawBytes(bytes, 1); 	
	}
		fileName.close();
}	
Ich möchte dass alle Zeichen ab der "382147en" Stelle bis "fileSize" durch NULLEN ersetzt werden. Er fügt die Nullen ein, löscht aber die anderen Daten komplett!

Hängt das eventuell davon ab, weil ich die vorherige Datei schließe(fileName.close())???

Gibts auch ne andere Möglichkeit??

Vielen Dank
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

Code: Alles auswählen

  if(fileName.open(IO_WriteOnly))    
Imho überschreibt WriteOnly immer, bzw. überschreibt die Datei. Was du suchst ist ReadWrite.
Zuletzt geändert von C_R am 7. Mai 2007 11:13, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Woher soll er wissen an welcher Stelle er die Daten schreiben sol wenn Du es nicht angibst?
z.B. hier: http://doc.trolltech.com/4.2/qdatastrea ... kipRawData
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterPan200
Beiträge: 18
Registriert: 19. März 2007 22:20

Beitrag von PeterPan200 »

Da ich mit der 2.3 Version arbeite, kann ich die Funktion "skipRawData" nicht benutzen!

Gruß
Peter
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

2.3? Wow da würde ich mich wohl weigern mit sowas zu arbeiten :)

Da bleibt Dir imho nichts anderes übrig als alles in einen Stück (d.h. mit einem QDataStream) zu schreiben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterPan200
Beiträge: 18
Registriert: 19. März 2007 22:20

Beitrag von PeterPan200 »

@Christian81--> coole Antwort :wink: !!!

Ich habe es mit IO_ReadWrite probiert...und wieder werden die Daten überschrieben!

Er fängt vorne an und füllt die Zeilen mit Nullen! :cry: :cry: :cry: :cry:
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Man muss nicht alles mit Qt machen. Manchmal tut es auch fopen, fseek, fwrite usw. :-)
Antworten