nun prob mit file einlesen
-
hola
hab ein file wo folgendes drinnen steh :
"Test1\0Test2\0Test3\0und noch irgendwas"
"\0" <- is das stringende gemeint , nicht als text.hab nun folgendes gemacht:
struct test { AnsiString str1,str2,str3; }; void __fastcall TForm1::Button2Click(TObject *Sender) { test *field=new test; void *v; TFileStream *datei=new TFileStream("tescht.txt",fmOpenRead); datei->Read(v,3); //d=(char*)v; Edit2->Text=Edit2->Text.sprintf("%c",(char*)v); delete datei; }
will also den ersten string aus dem stream dem Edit2 uebergeben.
bekomme aber immer ne Exception.weiß jemand rat ?
Deadman
-
Der Zeiger v zeigt ins Nirvana.
-
aloa
das mit dem nirvana stimmt. aber leider funkt "void *v=new void;" nicht.
und laut borland hilfevirtual int __fastcall Read(void *Buffer, int Count);
brauche ich n buffer der auf void basiert.
davon abgesehen, weiß ich zuvor ja nich, wie groß der buffer sein soll. kann man das nich irgendwie feststellen ?
Deadman
-
char* buffer = new char[20];
Read(buffer, 20); // oder 19, weiß ned
-
re
hab das nun mit nem char-buffer gemacht. aber wenn man sagen wir mal davon ausgehen, das das tescht.txt-file mal 40 MB hat, is es wahrscheinlich nich grad optimal, wenn ich nen 40 MB speicherblock anfordere. oder seh ich das da falsch ?
Deadman
-
Ne, das macht man natürlich nicht. Immer stückchenweise (z.B. mit einer Buffergröße von 65535 bytes) oder vielleicht brauchst du es ja auch zeilenweise?
-
re
noe zeilenweise brauch ich das nicht.
aber das blockweise auslesen is auch nich grad optimal.
werde wahrscheinlich noch ne index-datei anlegen, wo die offset-wertde der datensaetze drinnen stehen. aber kann ich dann ueberhaupt mit FileStream direkt nen datensatz aus einem file lesen ??zum bleistift moechte ich ab offset 356782 1300 bytes aus der datei lesen. wie funkt dass dann ? ich kann mit datei->read(buf,size) keinen offset angeben. muß ich dann alles aus der datei auslesen, bis ich dort bin, oder gibt es da noch ne andere oeffnungsart oder so ?
Deadman
-
Funktionieren tut das auf jeden Fall. Da ich mich mit dem BCB/VCL nicht auskenne kann ich dir da nicht mehr weiterhelfen. Aber such mal nach einer "seek" - Methode.
-
so nun hab ichs doch noch durchschaut.
danke dir.
mach mich nun mal vom acker. bis irgendwann einmal...
Deadman
80% aller computerfehler sitzen ca. 60 cm vom bildschirm entfernt