カレントディレクトリを求める
29 CurrentDirectoryCheck 動作確認 Delphi2007 更新日 2008/01/16(水)

カレントディレクトリを求める関数を作りました。
次のようなものです。

────────────────────
const
  DriveLetterStr: String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function DriveIndex(DriveLetter: Char): Byte;
begin
  Result := Pos(UpperCase(DriveLetter), DriveLetterStr);
end;
procedure testDriveIndex;
begin
  Check(1, DriveIndex('A'));
  Check(1, DriveIndex('a'));
  Check(3, DriveIndex('C'));
  Check(3, DriveIndex('c'));
  Check(24,DriveIndex('X'));
  Check(24,DriveIndex('x'));
  Check(26,DriveIndex('Z'));
  Check(26,DriveIndex('z'));
end;

{-------------------------------
//  カレントディレクトリを求める関数
機能:       DriveLetterを'A'とか指定すると
            そのドライブのカレントディレクトリを求めるが
            存在しなかったり利用できないドライブの場合
            カレントドライブのカレントディレクトリが返される
備考:
履歴:       2006/07/02(日) 22:45
//------------------------------}
function GetCurrentDir: String; overload;
begin
  GetDir(0, Result);
end;

function GetCurrentDir(DriveLetter: Char): String; overload;
begin
  GetDir(DriveIndex(DriveLetter), Result);
  if not SameText(DriveLetter, Result[1]) then
  begin
    Result := '';
  end;
end;
//------------------------------
────────────────────

使い方は次のようにします。
────────────────────
program CurDirCheck;

uses
  SysUtils,
  Dialogs;

function GetCurrentDir: String; overload;
function GetCurrentDir(DriveLetter: Char): String; overload;
//実装は上記参照

var
  i: Integer;
  DriveString: String;
  CurrentStrings: String;
  CurrentDirStr: String;
begin
  DriveString := GetDriveString;
  CurrentStrings := '';
  for i := 1 to Length(DriveString) do
  begin
    CurrentDirStr := GetCurrentDir(DriveString[i]);
    if CurrentDirStr = '' then
    begin
      CurrentStrings := CurrentStrings +
        DriveString[i] + 'ドライブ ' +
        '利用できません' + #10;
    end else
    begin
      CurrentStrings := CurrentStrings +
        DriveString[i] + 'ドライブ ' +
        CurrentDirStr + #10;
    end;
  end;
  SetLength(CurrentStrings, Length(CurrentStrings)-1);

  ShowMessage('カレントディレクトリは'+#10+
              GetCurrentDir +#10#10+
              '使用可能なドライブは'+#10+
              DriveString +#10#10+
              'それぞれのカレントディレクトリは'+#10+
              CurrentStrings);
end.
────────────────────
実行結果例は次の通り

    ---------------------------
    Curdircheck
    ---------------------------
    カレントディレクトリは
    C:\Temp\CurDirCheck

    使用可能なドライブは
    CDEGZ

    それぞれのカレントディレクトリは
    Cドライブ C:\Temp\CurDirCheck
    Dドライブ 利用できません
    Eドライブ E:\
    Gドライブ G:\
    Zドライブ Z:\
    ---------------------------
    OK   
    ---------------------------

Dドライブはメディアのささっていない実際のDVD-RAMドライブです


参考────────────────────
Delphi Acid Floor
http://www.wwlnk.com/boheme/delphi/vbtodel/daf0780.html