![]() |
Wie Fehler bzw. Rückgabewert False abfangen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte mit dieser Zeile prüfen, ob ein Wechseldatenträger beschreibbar ist:
Delphi-Quellcode:
Nun stecke ich eine gelockte SD-Karte ein und bekomme den Fehler, dass die Karte schreibgeschützt ist (ist auch logisch), siehe Screenshot.
ForceDirectoriesUTF8(RemovableDriveList.Strings[0] + 'test');
Aber wie fange ich diese Windowsmeldung ab? Diese zwei Möglichkeiten machen es nicht:
Delphi-Quellcode:
Der Windowsfehler kommt trotzdem.
try
ForceDirectoriesUTF8(RemovableDriveList.Strings[0] + 'test'); except end; // oder if not ForceDirectoriesUTF8(RemovableDriveList.Strings[0] + 'test') then ; Danke! |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Wie stellst du dir den vor, wie die zweite Möglichkeit was an der Meldung ändert :stupid: :mrgreen:
Abgesehen davon findet man mit Google super schnell ![]() |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Im Ernst, guckt dir ![]() |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ok....
Habe diese hier gefunden. Muss da Dw1 und Dw2 nicht mit Werter belegt werden?
Delphi-Quellcode:
function LaufwerkBereit(root: string): boolean;
var Oem: cardinal; Dw1, Dw2: DWORD; begin Oem := SetErrorMode(SEM_FAILCRITICALERRORS); result := GetVolumeInformation(PCHAR(Root), nil, 0, nil, Dw1, Dw2, nil, 0); SetErrorMode(Oem) ; end; procedure TForm1.Button1Click(Sender: TObject); begin if Laufwerkbereit('A:\') then ShowMessage('Laufwerk bereit!') else ShowMessage('Laufwerk nicht bereit!'); end; |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
![]() |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Der sagt mit, meine schreibgeschützte SD-Karte ist bereit... voller Quatsch...
Muss wohl noch was anpassen. |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
GetVolumeInformation wird hier nur dazu "missbraucht", um zu prüfen, ob ein Medium bzw. Laufwerk vorhanden ist. Wenn du wissen willst, ob das Laufwerk beschreibbar ist, musst du das trotzdem prüfen - ob nun mit ForceDirectories oder sonstwie, ist erstmal egal.
MfG Dalai |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Möglich, dass das geht. Denkbar, dass MS damit etwas anderes meint. Probier's doch einfach aus - mehr als nicht funktionieren kann's nicht :).
MfG Dalai |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ganz allgemein gesagt handelt es sich bei dem erscheinenden Dialog nicht um eine Fehlermeldung, sondern eine Aufforderung an den Benutzer, hier tätig zu werden und seine Entscheidung zu verkünden.
Erst wenn der Benutzer sich dagegen entscheidet, dann wird es ein Fehler. Und
Delphi-Quellcode:
wirft eben keine Exception, sondern liefert den Erfolg über einen
ForceDirectories
Delphi-Quellcode:
Wert zurück.
Boolean
Das sollte dann auch erklären, warum hier ein
Delphi-Quellcode:
ins Leere läuft.
try except
Ein Blick in die MSDN-Doku hilft auch ![]() |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Wenn ein Volume nicht raed only ist, heißt das noch lange nicht, dass man schreiben kann. Die Systemplatte ist z.B. nicht schreibgeschützt und man kann trotzdem ( als Nicht Admin) nicht in die Root schreiben.
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ok... aber wie prüfe ich, ob der Wechseldatenträger beschreibbar ist, so dass kein Meldungsfenster erscheinen?
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Hilfe lesen! |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Das wäre dann wie folgt, so wie ich das verstehen:
Delphi-Quellcode:
Aber
Result := GetVolumeInformation(PChar(Root), nil, 0, nil, Dw1, FILE_READ_ONLY_VOLUME, nil, 0);
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Eher so
Delphi-Quellcode:
var
MaximumComponentLength, FileSystemFlags: Cardinal; begin if not GetVolumeInformation( PChar( 'C:\'), nil, 0, nil, MaximumComponentLength, FileSystemFlags, nil, 0 ) then RaiseLastOSError( ); Result := ( ( FileSystemFlags and FILE_READ_ONLY_VOLUME ) = FILE_READ_ONLY_VOLUME ); end; Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Und wenn der Anwender unabhängig von Deiner Anwendung eine Karte mit Schreibschutz einschiebt, unterbleibt dann der Hinweis?
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Delphi-Quellcode:
??
RaiseLastOSError( );
Ich hoffe es wirft keine Meldung aus, diese möchte ich ja abfangen. |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ok, soweit alles klar, aber was mache ich mit der
Zitat:
Ist das eine Konstante und wenn ja welchen Wert hat sie? |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
MfG Dalai |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ich glaube ich hab's. Vielen Dank an alle!
Delphi-Quellcode:
function LaufwerkBeschreibbar(root: String): Boolean;
const FILE_READ_ONLY_VOLUME = $00080000; var Oem: Cardinal; MaximumComponentLength, FileSystemFlags: Cardinal; begin Oem := SetErrorMode(SEM_FAILCRITICALERRORS); if GetVolumeInformation(PChar(Root), nil, 0, nil, MaximumComponentLength, FileSystemFlags, nil, 0) then Result := ((FileSystemFlags and FILE_READ_ONLY_VOLUME) = FILE_READ_ONLY_VOLUME); SetErrorMode(Oem); end; |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Moment, muss es nicht so sein? Ohne if-Abfrage?
Delphi-Quellcode:
function LaufwerkBeschreibbar(root: String): Boolean;
const FILE_READ_ONLY_VOLUME = $00080000; var Oem: Cardinal; MaximumComponentLength, FileSystemFlags: Cardinal; begin Oem := SetErrorMode(SEM_FAILCRITICALERRORS); GetVolumeInformation(PChar(Root), nil, 0, nil, MaximumComponentLength, FileSystemFlags, nil, 0); Result := ((FileSystemFlags and FILE_READ_ONLY_VOLUME) = FILE_READ_ONLY_VOLUME); SetErrorMode(Oem); end; |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Aber dies ist noch lange kein Grund ständig diese nervigen modalen Exceptions zu werfen.:angel: Da glaube ich, werden wir uns nie einig werden.:cheers: |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Siehe Sir Rufo's Post #26 Zitat:
Das Deiner Funktion oder das der Funktion GetVolumeInformation? [EDIT] AlexII hat seinen Beitrag geändert, bevor meine Antwort auf seinen Original-Text gesendet wurde. |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Delphi-Quellcode:
.
GetVolumeInformation( PCHAR('Grütze'), ... )
Ach ja, RTFM -> MSDN-Doku (Link weiter oben) |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Also wenn das Laufwerk beschreibbar ist, ist Result = 0(False). Und wenn unbeschreibbar = -1(True) :roteyes:
Delphi-Quellcode:
if GetVolumeInformation(PChar(Root), nil, 0, nil, MaximumComponentLength, FileSystemFlags, nil, 0) then
begin Result := ((FileSystemFlags and FILE_READ_ONLY_VOLUME) = FILE_READ_ONLY_VOLUME); showmessage(booltostr(result)); end; |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
Du prüfst doch, ob das Flag FILE_READ_ONLY_VOLUME gesetzt ist. Ist der Datenträger beschreibbar, dann ist das Flag FILE_READ_ONLY_VOLUME nicht gesetzt und daher lautet das Ergebnis "false" (Flag nicht gesetzt). |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Ich glaube ich mache mal ne Pause....
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Das umkehren von boolschen Werten ist aber auch schon High Level Programming und nur was für erfahrene Programmierer ... OMG
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Du meinst sicher sowas hoch anspruchsvolles wie
Delphi-Quellcode:
:stupid:
MyBoolVar := Not MyBoolVar;
Da kann ich dir nur beipflichten, ist nichts für Anfänger :twisted: |
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
|
AW: Wie Fehler bzw. Rückgabewert False abfangen?
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 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