Seite 1 von 1
Eine Binärdatei mit "0" füllen?!?!
Verfasst: 7. Mai 2007 09:18
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
Verfasst: 7. Mai 2007 09:29
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);
Verfasst: 7. Mai 2007 11:08
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
Verfasst: 7. Mai 2007 11:13
von C_R
Imho überschreibt WriteOnly immer, bzw. überschreibt die Datei. Was du suchst ist ReadWrite.
Verfasst: 7. Mai 2007 11:13
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
Verfasst: 7. Mai 2007 11:30
von PeterPan200
Da ich mit der 2.3 Version arbeite, kann ich die Funktion "skipRawData" nicht benutzen!
Gruß
Peter
Verfasst: 7. Mai 2007 11:37
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.
Verfasst: 7. Mai 2007 11:49
von PeterPan200
@Christian81--> coole Antwort

!!!
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!

Verfasst: 7. Mai 2007 12:31
von macman
Man muss nicht alles mit Qt machen. Manchmal tut es auch fopen, fseek, fwrite usw.
