Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

hik*_*ari 3 delphi virtual path

我怎样才能转换像这样的路径

\设备\ HarddiskVolume3\Windows下

进入相应的虚拟路径?(比如c:\ Windows在这种情况下)

iPa*_*h ツ 6

我个人更喜欢本土方式:

function GetHDDDevicesWithDOSPath:TStringlist;
var
  i: integer;
  root: string;
  device: string;
  buffer: string;
begin
  setlength(buffer, 1000);
  result:=TStringlist.create;
  for i := Ord('c') to Ord('z') do
  begin
    root := Char(i) + ':';
    if (QueryDosDevice(PChar(root), pchar(buffer), 1000) <> 0) then
    begin
      device := pchar(buffer);
      result.add(format('%s = %s\',[device, root ]));
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

注意:此代码示例来自:http://www.delphipraxis.net/165249-auflistung-devices.html

这将返回逻辑驱动器和路径之间的映射.就我而言:

\Device\HarddiskVolume2 = c:\
\Device\HarddiskVolume3 = d:\
\Device\IsoCdRom0 = e:\
\Device\CdRom0 = f:\
\Device\hgfs\;Z:0000000000084af9\vmware-host\Shared Folders = z:\
Run Code Online (Sandbox Code Playgroud)

您必须使用相应的驱动器号替换路径中的"\ device\harddisk"部分.

请注意,驱动器号取决于用户.一些有用的链接:

  • 对于Delphi的现代版本,您可以通过返回`TDictionary <string,string>`使结果更有用,这样调用者就不必再进行字符串解析来查找所需的条目. (2认同)