![]() |
TFileStream-Probleme
Hi Leute,
letztens habe ich versucht eine Datei in ein FileStream zu laden. Das habe ich folgender Maßen gemacht:
Code:
So, als ich jetzt das Programm gestartet habe und eine Datei laden wollte, kam bei mir ne Exception und sagte: Ungültiges Format %p!!
MyStream := TFileStream.Create(OpenDialog1.Filename,fmOpenReadWrite);
Oder so ähnlich (Habe die Fehlermeldung nicht mehr so richtig im Kopf) |
Also folgender Code funktioniert bei mir unter Delphi 6.02:
Code:
Hast Du vielleicht nochmal die genaue Fehlemeldung?
procedure TForm1.Button3Click(Sender: TObject);
var MyStream : TFileStream; begin If OpenDialog1.Execute Then Begin MyStream:= TFileStream.Create( OpenDialog1.Filename, fmOpenReadwrite ); // ShowMessage( IntToStr(MyStream.Size) + ' Bytes gelesen' ); MyStream.Free; End; end; Grüße, Daniel |
Also, ich habe das Programm jetzt mal gestartet und der Fehler ist nicht mehr aufgetreten, als ich um den Code einen try..finally-Block gesetzt habe. Anscheinend funktioniert es so. Ich werde den Fehler versuchen nochmal zu reproduzieren.
Aber danke für deine Antwort. MfG DeCodeGuru |
Hi,
ich meine das sachen die Createt und Freeet werden grundsätzlich in einem Try...Finally sein sollten. Grüsse, Daniel :) |
Hi Daniel!
Zitat:
|
Spätestens, wenn Create und Free in unterschiedlichen Prozeduren stehen (müssen), ist try ... finally natürlich nicht mehr möglich. In diesem Fall kann man, falls das Programm trotz eines eventuellen Fehlers fortgesetzt werden soll, eine Statusvariable mitführen.
Eine mögliche Sitation ist z.B. eine Log-Datei, die ins Programmverzeichnis geschrieben wird, falls möglich. Wird das Programm dagegen von einem Read-Only-Verzeichnis oder von CD gestartet, entfällt das Log. Wo möglich, sollte man jedoch schon mit try ... finally kapseln. Eine erhebliche Fehlerquelle ist damit ausgeschaltet. Vor allem zum Vermeiden von Speicherlecks bei permanent laufenden Hintergrundprogrammen oder Serveranwendungen ist das lebenswichtig. :idea: |
Zitat:
|
Zitat:
Zitat:
|
Moin Alfons,
Zitat:
Wird das Objekt (unit)global benötigt, wird man es in der Regel in initialization erzeugen und in finalization freigeben können, was ja, im Wesentlichen, dem try/finally entspricht. Könntest Du, oder natürlich auch jemand anders, mal ein Beispiel angeben, wo dies nicht möglich ist? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz