判断文件路径是否为正确路径的问题(100分)

  • 主题发起人 主题发起人 linshenyang
  • 开始时间 开始时间
L

linshenyang

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样的文件路径 "D:/File/Regmon.exe /ss" 因为这个文件是存在于这个路径的,但由于有个 /ss的后缀,所以用fileExist判断是不存在的,请问各位大虾有什么办法
 
当然要翻译了,,,
var
FDir:string;
begin
A:='D:/File/Regmon.exe /ss';
FDIR:=copy(a,POS('/'),LENGTH(a)-pos('/')-2);
if fileexists(fdir) then
showmessage('ok');
 
这个只是如果是 /ss的情况,如果变成 regsvr32.exe -u D:/File/Regmon.exe 就形不通了
,能有通用的方法吗
 
A:='D:/File/Regmon.exe /ss';
if (DirectoryExists(ExtractFilePath(A))) and (FileExists(ExtractFilePath(A) + ExtractFileName(A)) then
Beep;
 
可以用POS 或 Copy函数把D:/File/Regmon.exe /ss 中的 D:/File/Regmon.exe 截取出来再用
 
上面三位大虾都没看清楚捏,我说的是有没有一个通用的函数,或者办法来取得这个路径是否是正确的,比如:这个只是如果是 /ss的情况,如果变成 regsvr32.exe -u D:/File/Regmon.exe 就形不通了
,能有通用的方法吗
 
除非这样
首先检测字串中是否包含c:/ d:/ e:/ f:/ 等等
如果找到,从该处一直向后扫描 直到空格出现为止

然后再判断该路径是否存在
 
d:/Program file/dd.exe 这个中间有特殊啊!再出点办法啊,各位
 
不但它可以有空格,任何一个目录都可以有空格
这个是微软定的规则,所以
基本上没有规律可循,再想想吧
 
是啊,我做了些算法,可以都有问题!没考虑全!
 
有没有大虾可以站出来啊!
 
把分1给我把[:D]
function GetFileName(path:string):string;
var
startpos,endpos:integer;
stemp:string;
i,c:integer;
fullname,fpath:string;
function StrSubCount(const Sub,Source: string): integer;
var
Buf : string;
i : integer;
Len : integer;
begin
Result := 0;
Buf:=Source;
i := Pos(Sub, Buf);
Len := Length(Sub);
while i <> 0 do
begin
Inc(Result);
Delete(Buf, 1, i + Len -1);
i:=Pos(Sub,Buf);
end;
end;
function PosEx(const Sub,Source: string; Index: Integer = 1): Integer;
var
I, J, K, L: Integer;
T: string;
begin
Result := 0;
T := Source;
K := 0;
L := Length(Sub);
for I := 1 to Index do begin
J := Pos(Sub, T);
if J <= 0 then Exit;
Delete(T, 1, J + L - 1);
Inc(K, J + L - 1);
end;
Dec(K, L - 1);
Result := K;
end;
begin
result:='';
startpos:=PosEx('/',path,1);
endpos:=PosEx('/',path,StrSubCount('/',path));
fpath:= copy(path, startpos-2,endpos-startpos+3 );
c:=length(path)-endpos;
stemp:=copy(path,endpos+1,c);
for i:=1 to c do
begin
fullname:=fpath+copy(stemp,1,i);
if fileexists(fullname) then
result:=fullname;
end;
end;
 
楼上的,可能我讲忘了,因为比如:C:/dd/dd.exe 如果这个是符合规则的路径,但是没有这个文件存在就不可能了!不好意思,先前没说清楚!有哪位大虾能帮帮忙
 
晕,楼主你也太懒了吧,我给你的代码稍微改动就能满足你的要求阿
 
这个很简单阿!就是字符串的查找删除阿!楼上已经解决了!
 
都没有人理解我的意思!真是的!
 
肯定是要转换一下了,给个思路
用ExtractFilePath来取得路径
用ExtractFileName来取得文件名
因为如果是exe文件的话有可能有参数,所以不要考虑后面是什么,直接用POS来判断文件名里面是否包含exe,如果有就截取文件名到第一个exe为止作为文件名。没有exe就直接是文件名了。
再把路径加上文件名来判断文件是否存在。
不过这也不能满足全部的条件,但楼主的要求应该可以满足了。
 
还是不能满足,不过我已经写了一个算法,根据N种特殊路径来进行判断,判断正确率是90%多!
 
后退
顶部