Delphi/C++ Builder の ExtractFilePath 関数をネットワークドライブで利用
Delphi/C++ Builder の ExtractFilePath 関数
ファイル名のドライブとディレクトリ部分を返す関数だが、単純にデリミタ(\)を後ろから検索しているだけなので、ネットワークドライブの時に、正しい区切りを取得できない
\\svr\shareddir\hoge → \\svr\shareddir\
\\svr\shareddir → \\svr\
という値が返ってくる
ネットワークドライブの場合 \\svr\shareddir までがドライブのため \\srv\ という表記は無いワケ
ExtractFileDrive を利用すると \\svr\shareddir が返ってくるので
みたいにすると \\svr までさかのぼらずに済む
ファイル名のドライブとディレクトリ部分を返す関数だが、単純にデリミタ(\)を後ろから検索しているだけなので、ネットワークドライブの時に、正しい区切りを取得できない
\\svr\shareddir\hoge → \\svr\shareddir\
\\svr\shareddir → \\svr\
という値が返ってくる
ネットワークドライブの場合 \\svr\shareddir までがドライブのため \\srv\ という表記は無いワケ
ExtractFileDrive を利用すると \\svr\shareddir が返ってくるので
function ExtractFilePathEx(S: string): string;
var Drive, Path: string;
begin
Drive := IncludeTrailingPathDelimiter(ExtractFileDrive(S));
Path := ExtractFilePath(S);
if (Length(Drive) > Length(Path)) then begin
Result := Drive;
end else begin
Result := Path;
end;
end;
みたいにすると \\svr までさかのぼらずに済む
コメント