Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: FS-Dateinamen in DOS-Dateinamen

  Alt 1. Aug 2006, 13:14
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.dllname '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.
$2B or not $2B
  Mit Zitat antworten Zitat