Delphi/C++ Builder の ExtractFilePath 関数をネットワークドライブで利用

Delphi/C++ Builder の ExtractFilePath 関数

ファイル名のドライブとディレクトリ部分を返す関数だが、単純にデリミタ(\)を後ろから検索しているだけなので、ネットワークドライブの時に、正しい区切りを取得できない

\\svr\shareddir\hoge → \\svr\shareddir\
\\svr\shareddir → \\svr\

という値が返ってくる

ネットワークドライブの場合 \\svr\shareddir までがドライブのため \\srv\ という表記は無いワケ
ExtractFileDrive を利用すると \\svr\shareddir が返ってくるので

  1. function ExtractFilePathEx(S: string): string;  
  2.     var Drive, Path: string;  
  3. begin  
  4.     Drive := IncludeTrailingPathDelimiter(ExtractFileDrive(S));  
  5.     Path  := ExtractFilePath(S);  
  6.     if (Length(Drive) > Length(Path)) then begin  
  7.         Result := Drive;  
  8.     end else begin  
  9.         Result := Path;  
  10.     end;  
  11. end;  

みたいにすると \\svr までさかのぼらずに済む

コメント