复制/提取文件路径的一部分?

时间:2011-06-03 11:01:09

标签: delphi filenames filepath

如何复制/提取部分文件路径?

例如,假设我有这条路径: D:\ Programs \ Tools \ Bin \ Somefile.dat

我怎样才能复制/提取它,使其像这样:

C:\用户\宾\ Somefile.dat

C:\用户\工具\ BIN \ Somefile.dat

C:\用户\程序\工具\ BIN \ Somefile.dat

请注意,上面的示例是原始路径的一部分,并将其更改为另一个目录。我认为这叫做扩展名称或者可能是什么?

PS,我已经知道了ExtractFileName和ExtractFilePath等,这条路径无论如何都可能是动态的,因为它不是一个硬编码路径,但是一直在变化,所以这些功能可能都不好。

感谢。

3 个答案:

答案 0 :(得分:4)

这是一个快速实现,它返回路径的TAIL,包括指定数量的元素。还有一些如何使用它的演示,结果正是您所要求的。不幸的是,我并不完全理解你所追求的转变:这可能正是你所追求的,或者它可能是完全错误的,恰好会产生看起来像你的样本的结果:

program Project25;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function ExtractPathTail(const OriginalPath:string; const PathElemCount:Integer):string;
var i, start, found_delimiters: Integer;
begin
  start := 0;
  found_delimiters := 0;
  for i:=Length(OriginalPath) downto 1 do
    if OriginalPath[i] = '\' then
    begin
      Inc(found_delimiters);
      if found_delimiters = PathElemCount then
      begin
        start := i;
        Break;
      end;
    end;
  if start = 0 then
    raise Exception.Create('Original path is too short, unable to cut enough elements from the tail.') // mangled English to help SO's code formatter
  else
    Result := System.Copy(OriginalPath, start+1, MaxInt);
end;

const SamplePath = 'D:\Programs\Tools\Bin\Somefile.dat';

begin
  try
    WriteLn('C:\Users\' + ExtractPathTail(SamplePath, 2)); // prints: C:\Users\Bin\Somefile.dat
    WriteLn('C:\Users\' + ExtractPathTail(SamplePath, 3)); // prints: C:\Users\Tools\Bin\Somefile.dat
    WriteLn('C:\Users\Programs\' + ExtractPathTail(SamplePath, 3)); // prints: C:\Users\Programs\Tools\Bin\Somefile.dat
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

答案 1 :(得分:0)

你看过ExtractFileName函数了吗?都是为你而建的。当然,根据路径/文件的来源,您可能需要ExtractFilePath或其他相关功能。

答案 2 :(得分:0)

尝试使用PathAppend和PathExtractElements函数