如何复制/提取文件路径的一部分?
例如,假如我有这条路径:D:\ Programs\Tools\Bin\Somefile.dat
我怎么能复制/提取它,使它像这样:
C:\用户\ BIN\Somefile.dat
要么
C:\用户\工具\ BIN\Somefile.dat
要么
C:\用户\程序\工具\ BIN\Somefile.dat
请注意,上面的示例是原始路径的一部分,并将其更改为另一个目录.我认为这叫做扩展名称或者可能是什么?
PS,我已经知道了ExtractFileName和ExtractFilePath等,这条路径无论如何都可能是动态的,因为它不是一个硬编码路径,但是不断变化,所以这些功能可能都不好.
谢谢.
这是一个快速的实现,它返回路径的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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |