ahxia说的很不错嘛,不过关于<font color=red>ExtractFilePath</font>我还有点不明白,50先给ah

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
ahxia说的很不错嘛,不过关于&lt;font color=red&gt;ExtractFilePath&lt;/font&gt;我还有点不明白,50先给ahxia用来表示谢意,剩下50分提这个问题(100分)<br />"因为怕是 mpeg4.exe 自己要在本地目录下找东西,而且还自己不用自己<br>ExtractFilePath,... 就在你执行程序的当前目录找"<br>------请问:1)在什么情况下需要在本地目录下找东西?一般我们做的程序是在哪里找东西<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;的?<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2)ExtractFilePath只是delphi的函数,对应的winApi是什么?<br>当然剩下的50分ahxia也可以挣去的...............
 
ExtractFilePath的源码如下:<br><br>function LastDelimiter(const Delimiters, S: string): Integer;<br>var<br>&nbsp; P: PChar;<br>begin<br>&nbsp; Result := Length(S);<br>&nbsp; P := PChar(Delimiters);<br>&nbsp; while Result &gt; 0 do<br>&nbsp; begin<br>&nbsp; &nbsp; if (S[Result] &lt;&gt; #0) and (StrScan(P, S[Result]) &lt;&gt; nil) then<br>&nbsp; &nbsp; &nbsp; if (ByteType(S, Result) = mbTrailByte) then<br>&nbsp; &nbsp; &nbsp; &nbsp; Dec(Result)<br>&nbsp; &nbsp; &nbsp; else<br>&nbsp; &nbsp; &nbsp; &nbsp; Exit;<br>&nbsp; &nbsp; Dec(Result);<br>&nbsp; end;<br>end;<br><br>function ExtractFilePath(const FileName: string): string;<br>var<br>&nbsp; I: Integer;<br>begin<br>&nbsp; I := LastDelimiter('/:', FileName);<br>&nbsp; Result := Copy(FileName, 1, I);<br>end;<br><br>可见它对应的WINAPI是不存在的。
 
1&gt;当前程序安装目录、Widows目录、windows/system目录<br>&nbsp; 文件放在这三个地方可以不加路径直接用文件名就可,不过为了程序的可读性,建议你还是<br>&nbsp; 加上路径吧。<br>2&gt;有人说了
 
这是一个很简单的函数,自己手动分析也很简单(注意: path 应该以 '/' 结尾.)<br>其实就是查找最后一个 '/',这之前的部分(含'/')就是 ExtractFilePath 的值<br><br>function myExtractFilePath(const FileName: string): string;<br>var<br>&nbsp; i: integer;<br>begin<br>&nbsp; result := '';<br>&nbsp; for i := length(FileName) downto 1 do<br>&nbsp; begin<br>&nbsp; &nbsp;if FileName = '/' then<br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp; result := copy(FileName, 1, i);<br>&nbsp; &nbsp; exit;<br>&nbsp; &nbsp;end;<br>&nbsp; end;<br>end;
 
extractfilepath就是将一个合法的文件名(包括目录)的父目录提取出来<br>extractfilepath('c:/windows/win.ini')='c:/windows/'<br>extractfilepath('c:/windows/command')='c:/windows/'<br>与此相对应的是extractfiledir,提取结果相同,但是结尾没有/
 
我想大家没有理解fish的意思,其实,有很多程序都是要调用一些自己的外部资源,<br>例如,某某人编程序的时候,要loadfile(...)可是还没有养成习惯先读去自己的当前<br>目录...这个时候,在别的目录下执行该程序,就会出找不到 xxx 的错 。<br>所以tip1 := 自己做程序,一定要注意分析自己的当前路径。<br>&nbsp; &nbsp; tip2 := 别人的程序如果真的不分析路径的那种,用切换当前目录的办法(用什么<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 函数想不起来了)。切换过去执行就没有问题。<br><br>to wind98, 你说的是因为可执行程序在环境变量的path里有路径。不等同于fish的情况。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
910
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
D
回复
0
查看
840
DelphiTeacher的专栏
D
后退
顶部