获取文件夹名称(100分)

  • 主题发起人 主题发起人 zglwxb
  • 开始时间 开始时间
Z

zglwxb

Unregistered / Unconfirmed
GUEST, unregistred user!
已知 根据 路径 来去得 文件名称
例如 c:/ss/dd/*.* 取得结果 为 dd

谢谢
 
var
tt:TStringList;
spath,dpath:string;
begin
spath:='c:/ss/dd/*.*';
tt:=TStringList.Create;
tt.Delimiter:='/';
tt.DelimitedText:=spath;
dpath:=tt[tt.count-2]; //dpath保存的就是你想要的!!
tt.free;
end;
 
给你个函数
function GetToken(const S: string; index: Integer; bTrail: Boolean = False; Delimiters: TSysCharSet = [' ', #9, #10, #13]): string;
var
I, W, head, tail: Integer;
bInWord : Boolean;
begin
I := 1;
W := 0;
bInWord := False;
head := 1;
tail := Length(S);
while (I <= Length(S)) and (W <= index) do
begin
if S in Delimiters then
begin
if (W = index) and bInWord then tail := I - 1;
bInWord := False;
end else
begin
if not bInWord then
begin
bInWord := True;
Inc(W);
if W = index then head := I;
end;
end;

Inc(I);
end;

if bTrail then tail := Length(S);
if W >= index then Result := Copy(S, head, tail - head + 1)
else Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := GetToken('c:/ss/dd/*.*' ,3,false ,['/']); //dd
label2.Caption := GetToken('c:/ss/dd/*.*' ,2,false ,['/']); //ss
label3.Caption := GetToken('c:/ss/dd/*.*' ,1,false ,['/']); //c:
end;
 
很简单啊,
取倒数一二('/')之间的字符
用到的函数有pos(),copy(),length(),点到之止
 
var
s:string;
begin
s:='c:/ss/dd/*.*';
s:=extractfilepath(s);
s:=copy(s,1,length(s)-1);
while pos('/',s)>0 do
begin
delete(s,1,pos('/',s));
end;
showmessage(s);
end;
 
推荐用 weiliu 的 方式 ,简单清晰
 
多人接受答案了。
 
后退
顶部