ホーム >プログラム >Delphi 6 ローテクTips

Unicode対応ExtractFilePath

Unicode対応ExtractFilePath。

interface

function ExtractFilePathW(sFile: WideString): WideString;
function ExtractFileDirW (sFile: WideString): WideString;
function gfnsFilePathGet(sFile: WideString): WideString;
function gfnsFileDirGet (sFile: WideString): WideString;


implementation

function ExtractFilePathW(sFile: WideString): WideString;
//Unicode対応ExtractFilePath
var
  i: Integer;
begin
  Result := '';
  if (sFile <> '') then begin
    for i := Length(sFile) downto 1 do begin
      if (sFile[i] = '\') or (sFile[i] = ':') then begin
        Result := Copy(sFile, 1, i);
        Break;
      end;
    end;
  end;
end;

function ExtractFileDirW(sFile: WideString): WideString;
//Unicode対応ExtractFileDir
var
  li_Len: Integer;
begin
  Result := gfnsFilePathGet(sFile);
  li_Len := Length(Result);
  if (li_Len >= 3) then begin
    if  (Result[li_Len]      = '\') //AIU
    and (Result[li_Len - 1] <> ':')
    then begin
      //末尾の'\'を取り除く
      SetLength(Result, li_Len - 1);
    end;
  end;
end;

function gfnsFilePathGet(sFile: WideString): WideString;
{
Unicode対応ExtractFilePath。
sFileのパス部分を返す。
ドライブ名も含む。
末尾の '\' は返る。
ただしパス部分がない場合は空文字を返す。
}

var
  i: Integer;
begin
  Result := '';
  if (sFile <> '') then begin
    for i := Length(sFile) downto 1 do begin
      if (sFile[i] = '\') then begin
        Result := Copy(sFile, 1, i);
        Break;
      end else if (sFile[i] = ':') then begin
        Result := Copy(sFile, 1, i) + '\';
        Break;
      end;
    end;
  end;
end;

function gfnsFileDirGet(sFile: WideString): WideString;
{
Unicode対応ExtractFileDir。
sFileのパス部分を返す。
ドライブ名も含む。
末尾の '\' は返らない。
ただしパス部分がない場合は空文字を返す。
}

var
  i: Integer;
begin
  Result := '';
  if (sFile <> '') then begin
    for i := Length(sFile) downto 1 do begin
      if (sFile[i] = '\') then begin
        Result := Copy(sFile, 1, i - 1);
        Break;
      end else if (sFile[i] = ':') then begin
        Result := Copy(sFile, 1, i);
        Break;
      end;
    end;
  end;
end;

ExtractFilePathWとgfnsFilePathGetは末尾に '\' のつく値を返します。
ExtractFileDirWとgfnsFileDirGetは末尾に '\' のつかない値を返します。
パス部分がドライブ名のみの場合、ExtractFilePathとExtractFileDirは末尾の '\' の調整は行いません。
gfnsFilePathGetはパス部分がドライブ名のみの場合 '\' がなければつけ足します。
gfnsFileDirGetはパス部分がドライブ名のみの場合 '\' があれば取り去ります。

sFile ExtractFilePathW ExtractFileDirW gfnsFilePathGet gfnsFileDirGet
'd:' 'd:' 'd:' 'd:\' 'd:'
'd:\' 'd:\' 'd:\' 'd:\' 'd:'
'temp' '' '' '' ''
'\temp' '\' '\' '\' ''
'temp\' 'temp\' 'temp' 'temp\' 'temp'