AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

try except bei TFileStream im Thread

Ein Thema von Viktorii · begonnen am 10. Mär 2011 · letzter Beitrag vom 10. Mär 2011
Antwort Antwort
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

try except bei TFileStream im Thread

  Alt 10. Mär 2011, 10:15
Delphi-Version: XE
Hallo.


Ich habe folgendes in einem Thread gemacht:
Delphi-Quellcode:
  FileStream := nil;
  FileStream := TFileStream.Create(Path + Filename, fmCreate);
  try
    FileStream.Write(MyString[1], Length(MyString) * 2);
  except
    on E:Exception do
      Application.MessageBox(PWideChar('FileStream Exception: ' + e.Message) , 'Exception', MB_OK + MB_ICONQUESTION);
  end;

  if assigned(FileStream) then
    FreeAndNil(FileStream);
Nun hatte ich den Fall, dass beim create einen Exception aufgetreten ist, weil die Pfadangabe nicht richtig war. Allerdings ist diese Exception immer 'versumpft', wurde also nie gemeldet, da das create ja nicht im try Block war.

Gehört das create in diesem Fall dann doch in den try Block? Sonst liest man, dass da da eigentlich nicht reigehört...
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

AW: try except bei TFileStream im Thread

  Alt 10. Mär 2011, 10:19
Hi, ich würds so machen:

Delphi-Quellcode:
try
  FileStream := TFileStream.Create(Path + Filename, fmCreate);
  try
    // Aus '2' habe ich SizeOf(Char) gemacht
    FileStream.Write(MyString[1], Length(MyString) * SizeOf(Char));
  finally
    FileStream.Free;
  end;
except
  on E:Exception do
    Application.MessageBox(PWideChar('FileStream Exception: ' + e.Message) , 'Exception', MB_OK + MB_ICONQUESTION);
end;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: try except bei TFileStream im Thread

  Alt 10. Mär 2011, 11:04
Man könnte auch den Exception-Text einfach nur erweitern und dann weiterreichen, anstatt gleich die ganze Exception abzufangen.
Delphi-Quellcode:
try
  FileStream := TFileStream.Create(Path + Filename, fmCreate);
  try
    FileStream.Write(MyString[1], Length(MyString) * SizeOf(Char));
  finally
    FileStream.Free;
  end;
except
  on E: Exception do
    E.Message := 'FileStream Exception: ' + E.Message;
  raise;
end;


Zitat:
MessageBox(PWideChar(...
PWideChar und PChar gemischt?
Schön daß man Unicodefehler auf auf einem Unicode machen kann ... wehe es beschwert sich dann einer, daß es in ANSI nicht läuft

Application.MessageBox ist auf PChar definiert, also sollte man dan nicht einfach wo PWideChar verwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: try except bei TFileStream im Thread

  Alt 10. Mär 2011, 17:07
Seid ihr euch sicher, dass eine MessageBox in einem Thread sinnvoll ist?
Und eine Exception in einem Thread (auch wenn die nochmals geraised wird) verliert sich im Nirwana.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: try except bei TFileStream im Thread

  Alt 10. Mär 2011, 17:23
nja, diese wäre wenigstens nicht so threadunsicher, wie die VCL,
aber wenn man dann auch noch so "blöd" ist und die MessageBox ebenfalls über die VCL laufen läßt, der braucht sich dann nicht wundern, wenn irgendwann die VCL gleich mit verreckt.

- die Windows.MessageBox ist quasi threadsicherer
- Forms.Application.MessageBox nutzt sehr viel von der VCL, bevor es den Aufruf an Windows.MessageBox weiterleitet



Thread-Exceptions verlieren sich nicht im Nirvana ... du darfst nur nicht vergessen diese abzufragen,
da Delphi sie aus dem Thread rausreicht ... da gab's vor Kurzem einen DP-"Thread" dazu.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Mär 2011 um 17:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz