DynamicArray in Datei schreiben?
-
Hi
Ich habe folgendes Problem:
Ich erstelle ein Dynamisches Array. Das klappt auch sehr gut. Wenn ich es allerdings via TFileStream in eine Datei schreiben möchte, werden null Bytes geschrieben.Da das DynamicArray funktioniert hier der Quelltext des "in die Datei schreibens":
TFileStream* MeinStream = new TFileStream("MeinBild2.dbxi", fmCreate);
MeinStream->Write(&MeinArray, sizeof(MeinArray));
MeinStream->Free();
-
Also bei mir funktioniert das...
Auf jeden fall Free ist pfui nimm delete!
-
Naja, dann kann es ja nur an meinem DynamicArray liegen.
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Main.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CGAUGES" #pragma resource "*.dfm" TForm1 *Form1; DynamicArray<TColor>Line1; int NewPicH; //---------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TPicture *NewPic = new TPicture; OpenDialog1->Execute(); NewPic->LoadFromFile(OpenDialog1->FileName); NewPicH=NewPic->Height; Line1.Length=NewPicH; for(int i=0;i<NewPicH;i++) { Line1[i]=NewPic->Bitmap->Canvas->Pixels[0][i]; } TFileStream* MeinStream = new TFileStream("MeinBild2.dbxi", fmCreate); MeinStream->Write(&Line1, sizeof(Line1)); //hatte die Namen geändert zur besseren Erkennbarkeit! delete MeinStream; }So das is mein Quellcode
-
hab es jetzt auch mal mit fopen, fwrite, fclose versucht. Die Datei wird bei FileStream und fopen nicht mal erstellt! Wieso? Normalerweise müsste doch wenigstens eine leere Datei erstellt werden.

-
Hm is jetzt aber irgendwie ziemlich komisch...
Probiers mal mit
TFileStream* MeinStream = new TFileStream("C:\\MeinBild2.dbxi", fmCreate);und guck dann mal ob du die Datei uner c:\ findest.
-
mmh merkwürdig. Das hat tatsächlich geklappt. Es hat sonst aber immer so geklappt. Die Datei wurde immer im WorkingDirectory gespeichert.
Allerdings ist die Datei gerademal 4 Byte groß? Das kann dohc nich sein bei 768 pixeln oder?
-
Ich weiß wieso er so wenig schreibt. sizeof(Line1) sagt ihm er soll nur 4 Byte schreiben. Wie kann ich die gesamte Größe von Line1 rausfinden?
Edit: sizeof(Line1) gibt nur die größe des Typs des DynamicArray an. sizeof(Line1[0]) gibt die richtige Größe an, also:
int gesamt=0; //Die Größe des Arrays
for(int b; b<AllLines.Length; b++)
{
gesamt=gesamt+sizeof(AllLines[b]);
}Edit: Aber leider wird die Datei bei gesamt+1024 immer noch größer
