Hätte beinah gesagt, daß dieses bei mir nicht läuft,
aber wenn sBuffer zozusagen nicht vorhanden ist, dann wars ja och kein Wunder.
Also entweder vor der Schleife ein SetLength einfügen,
SetLength(sBuffer, MAX_PATH);
oder sBuffer anders definieren:
sBuffer: Array[0..MAX_PATH] of Char;
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
var
sDrive : String;
sBuffer: Array[0..MAX_PATH-1] of Char;
begin
sDrive := 'A:';
repeat
inc(sDrive[1]);
if QueryDosDevice(@sDrive[1], @sBuffer, MAX_PATH) > 0 then
writeln(sDrive + ' = ' + Trim(sBuffer));
until (sDrive[1] = 'Z');
readln;
end.
PS:
QueryDosDevice ist in der Windows-
Unit (zumindestens hier in D7) definiert
und
sDrive[1] := #64; brauchst du nicht nochmal zu definieren, denn #64 ist ja das 'A' und somit schon vorhanden
Hab's gefunden:
GetVolumePathName
und es funktioniert sogar mit direkt deinem Pfad
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, windows;
function GetVolumePathName(lpszFileName: LPCTSTR; lpszVolumePathName: LPTSTR; cchBufferLength: DWORD): BOOL; stdcall;
external 'kernel32.dll' name 'GetVolumePathNameA';
var
sDrive : String;
sBuffer: Array[0..MAX_PATH-1] of Char;
begin
sDrive := '\Device\HarddiskVolume0';
if GetVolumePathName(@sDrive[1], @sBuffer, MAX_PATH) then
writeln(Trim(sBuffer))
else
writeln('ERROR');
readln;
end.