Zugriffsverletzung <- nach Auswahl in einer FileListBox
-
void __fastcall TForm1::FileListBox1DblClick(TObject *Sender) { for (int i = 0; i < FileListBox1->Items->Count; i++) { long curpos, length; datei1 = fopen(FileListBox1->Items->Strings[i].c_str(),"r+"); curpos = ftell(datei1); fseek(datei1, 0, SEEK_END); length = ftell(datei1); fseek(datei1, curpos, SEEK_SET); Label2 -> Caption = length; } }
wenn ich mit doppelklick eine datei in einer "FileListBox" auswähle, erscheint eine fehlermeldung:
"Zugriffsverletzung bei Adresse 32665A01 in Modul 'CC3260MT.DLL'. Lesen von Adresse F8348A44."ich will die größe einer datei ausgeben,
in einem Delphi-Forum habe ich was mit "Application.OnException" gelesen,
-
Der angeforderte Modus "r+" will Lese- und Schreibrechte für die Datei und führt bei geöffneten Dateien zu einem Fehler. Der Modus "r" funktioniert auch bei geöffneten Dateien. Wenn du den Fehler abfangen willst, benutze try {} catch () {}.
Weiterhin:
Die For-Schleife ist ziemlich sinnfrei, weil auf die Weise nur die letzte Dateigröße angezeigt wird.
Die Datei wird nicht geschlossen, sollte aber.
Über das Rücksetzen des Dateizeigers gehen die Meinungen vielleicht auseinander, ich find's nutzlos.
-
ich habe es jetzt noch mal geändert,
void __fastcall TForm1::FileListBox1DblClick(TObject *Sender) { try { long curpos=0, length=0; //for (int i = 0; i < FileListBox1->Items->Count; i++) // { Label3 -> Caption = FileListBox1->FileName; datei1 = fopen(FileListBox1->FileName.c_str(),"r+"); curpos = ftell(datei1); fseek(datei1, 0, SEEK_END); length = ftell(datei1); fseek(datei1, curpos, SEEK_SET); //return length; Label2 -> Caption = length; } catch (...) {} }
nur bekomme ich bei manchen dateien noch die fehlermeldung,
hat es was mit dem EOF zu tun ??oder wie bekomme ich das ende der datei raus ??
fseek(datei1, 0, SEEK_END);
-
Morris Szyslak schrieb:
Der angeforderte Modus "r+" will Lese- und Schreibrechte für die Datei und führt bei geöffneten Dateien zu einem Fehler. Der Modus "r" funktioniert auch bei geöffneten Dateien.
wer lesen kann ...
-
void __fastcall TForm1::FileListBox1DblClick(TObject *Sender) { try { long curpos=0, length=0; Label3 -> Caption = FileListBox1->FileName; datei1 = fopen(FileListBox1->FileName.c_str(),"r"); curpos = ftell(datei1); fseek(datei1, 0, SEEK_END); length = ftell(datei1); fseek(datei1, curpos, SEEK_SET); Label2 -> Caption = length; } catch (...) {} }
okydoky, funktioniert jetzt, thx @Morris Szyslak
habe nicht verstandes was du meinst,
-
Morris Szyslak schrieb:
Die Datei wird nicht geschlossen, sollte aber.
Huberts schrieb:
habe nicht verstandes was du meinst
merkt man...