Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GetVolumeInformation seltsames Verhalten? (https://www.delphipraxis.net/193272-getvolumeinformation-seltsames-verhalten.html)

Glados 11. Jul 2017 09:44

GetVolumeInformation seltsames Verhalten?
 
Folgendes Konstrukt gibt als Rückgabe sonderliche Zeichen beispielsweise einen Pfeil der nach oben zeigt wenn man Informationen eines Laufwerks abfragt welches nicht verbunden ist
Delphi-Quellcode:
DriveLetter := #0;

Tmp := ExtractFileDrive(Path);
if Length(Tmp) >= 1 then
 DriveLetter := Tmp[1];

if DriveLetter <> #0 then
 begin
  GetVolumeInformation(PChar(DriveLetter + ':\'), Buf, SizeOf(Buf), nil, Max, Flags, nil, 0);
  sRes := StrPas(Buf);
 end;
Ist es möglich vorher abzufragen, ob das Laufwerk überhaupt verbunden ist?

Der schöne Günther 11. Jul 2017 09:52

AW: GetVolumeInformation seltsames Verhalten?
 
Wenn du es unbedingt über die WinAPI (statt den Komfortfunktionen welche dir Delphi schon bietet) nutzen willst: GetLogicalDriveStrings.

Außerdem solltest du den Rückgabewert deines GetVolumeInformation-Aufrufs auswerten, der gibt ein True/False zurück ob es überhaupt geklappt hat :!:

himitsu 11. Jul 2017 09:55

AW: GetVolumeInformation seltsames Verhalten?
 
Wie ist "Buf" deklariert?

Und warum prüft niemand den Rückgabewert dieser API?
MSDN-Library durchsuchenGetVolumeInformation -> siehe "Return value"

Glados 11. Jul 2017 10:15

AW: GetVolumeInformation seltsames Verhalten?
 
Fehler gefunden danke.

himitsu 11. Jul 2017 10:23

AW: GetVolumeInformation seltsames Verhalten?
 
Aber für andere Hilfesuchende, mit dem gleichen Problem, nicht genannt.
Die bedanken sich bestimmt dann auch, wenn sie diesen Thread finden.

Glados 11. Jul 2017 10:58

AW: GetVolumeInformation seltsames Verhalten?
 
So ist es falsch
Delphi-Quellcode:
GetVolumeInformation(PChar(DriveLetter + ':\'), Buf, SizeOf(Buf), nil, Max, Flags, nil, 0);
sRes := StrPas(Buf);
So ist es besser
Delphi-Quellcode:
if GetVolumeInformation(PChar(DriveLetter + ':\'), Buf, SizeOf(Buf), nil, Max, Flags, nil, 0) then
 sRes := StrPas(Buf);
Wenn jetzt sRes = '' ist, kann man ja noch immer gucken was man macht. Vielleicht sogar ein RaiseLastOSError oder eine andere Behandlung.

freimatz 11. Jul 2017 13:27

AW: GetVolumeInformation seltsames Verhalten?
 
Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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