2016-12-26 1 views
2

ich fwrite bin mit den Werten eines QVector rawData genannt zu speichern.Warum läuft mein fwrite-Befehl nur einmal?

Hier ist mein Code:

unsigend short* ptr = rawdata();  

FILE * pFile; 
pFile = fopen("arrayValues.txt", "a"); 
fwrite(ptr, sizeof(unsigned short), sizeof(rawData), pFile); 
fclose(pFile); 

Das Programm über „Arbeiten“, das heißt ich in der Lage war, in eine Datei zu schreiben und wenn ich die Datei mit einem Hex-Editor öffnen kann ich Sachen drin sehen. Es schreibt jedoch nur die Werte für ein Bild und stoppt dann, obwohl das Programm diese Methode immer wieder aufruft.

Noch seltsamer, wenn ich das Programm schließe und es erneut ausführe, wird es die Datei öffnen (die bereits Werte von dem letzten Lauf darin hat) und einen neuen Satz von Werten an das Ende anhängen. Ich weiß also, dass ich die Datei im Append-Modus öffne.

+0

Können Sie zeigen, wie das Code-Segment mehr als einmal aufgerufen wird? –

+3

http://stackoverflow.com/help/mcve Problem ist wahrscheinlich in Code nicht gezeigt. – Olivier

+0

Was sind 'rawdata()' und 'roheDaten'? – wally

Antwort

7

Da Sie erwähnt rawData ein QVector ist, ersetzen:

sizeof(rawData) 

mit

rawData.size() 

Wenn dies nicht funktioniert, ich glaube nicht, das Problem mit dem Code ist, dass Sie uns zeigte. Bitte geben Sie weitere Informationen/Code an.

Erläuterung: Der sizeof Operator gibt die Größe in Bytes des Typs Sie als Argument geben. In Ihrem Fall gibt es die Anzahl der vom Typ QVector verwendeten Bytes zurück, da Sie keinen Zeiger als Argument übergeben, sondern ein Objekt vom Typ QVector. Das Mitglied funciton size() ist ein guter Weg, um die Anzahl der Elemente für die Klasse QVector zu bekommen.

+0

Das hat funktioniert! Würde es Ihnen etwas ausmachen zu erklären, was mit dem, was ich vorher hatte, nicht stimmt? –

+0

Ich habe die Erklärung in der Antwort hinzugefügt. – ApprenticeHacker