FileExists咬了我一口!(50分)

K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
我在2000中用FileExists判断一个文件是否存在(用Admin登陆),凡是Win200的文件都不能正确判断!<br>例如:C:/Winnt/Notepad.exe!返回的总是False!但是对于其他的就可以!比如C:/Winnt/MyProgram.ini.<br>不知道还有谁碰到过类似的情况?<br>Win2K Advance Server+Sp1 &nbsp;Delphi5+Sp1 &nbsp;<br><br>&nbsp;
 
M

menxin

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,大小写没问题吧<br>
 
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
赫赫,我使用OpenDialog打开的!<br>if OpenDialog1.Execute then<br>&nbsp; if FileExists(OpenDialog1.FileName) then<br>&nbsp;...
 

热血

Unregistered / Unconfirmed
GUEST, unregistred user!
我没有问题
 
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
需要说明的事,我的C:是NTFS格式的.对于FAT32的没有任何问题!但是对于Win2K的系统的文件就不行了!<br>开始我以为我的程序有问题,但是我看乐有看,没有错误啊?不知道是什么原因?
 
G

g622

Unregistered / Unconfirmed
GUEST, unregistred user!
笨办法<br>用同样的文件名和路径 rewite 建立文件 如果抛出异常 说明存在 &nbsp;相反则不存在<br>删除新建文件 finally closefile
 
C

creation-zy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么会出这种问题!晕倒!<br>还有什么API能实现这个功能的吗?才发现我写的一个工具软件也有这个问题——多谢Kingron。<br><br>to g622:<br>&nbsp; 如果在只读的盘上,无论存不存在都会抛出异常。
 
I

iie

Unregistered / Unconfirmed
GUEST, unregistred user!
似乎是编译器的事吧,这个函数是borland给的,不是m$给的,又遇到……<br>不知道D6是否可以兼容win2000<br>
 
G

g622

Unregistered / Unconfirmed
GUEST, unregistred user!
异常的类型不会也是一样的吧
 
S

sslxml

Unregistered / Unconfirmed
GUEST, unregistred user!
看看FileExists的实现如下:<br><br>function FileAge(const FileName: string): Integer;<br>var<br>&nbsp; Handle: THandle;<br>&nbsp; FindData: TWin32FindData;<br>&nbsp; LocalFileTime: TFileTime;<br>begin<br>&nbsp; Handle := FindFirstFile(PChar(FileName), FindData);<br>&nbsp; if Handle &lt;&gt; INVALID_HANDLE_VALUE then<br>&nbsp; begin<br>&nbsp; &nbsp; Windows.FindClose(Handle);<br>&nbsp; &nbsp; if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);<br>&nbsp; &nbsp; &nbsp; if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,<br>&nbsp; &nbsp; &nbsp; &nbsp; LongRec(Result).Lo) then Exit;<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>&nbsp; Result := -1;<br>end;<br><br>function FileExists(const FileName: string): Boolean;<br>begin<br>&nbsp; Result := FileAge(FileName) &lt;&gt; -1;<br>end;<br><br>----------------------------------<br>你可以重写这个 FileExists,使用 SearchPath 代替 FindFirstFile/FindClose!<br><br>如下:<br>function MyFileExists(const FileName: string): Boolean;<br>var<br>&nbsp; P, F: string;<br>&nbsp; Buf: array[0..255] of Char;<br>&nbsp; FP: PChar;<br>&nbsp; N: Integer;<br>begin<br>&nbsp; try<br>&nbsp; &nbsp; P:= ExtractFilePath(FileName);<br>&nbsp; &nbsp; F:= ExtractFileName(FileName);<br>&nbsp; &nbsp; N:= SearchPath(PChar(P), PChar(F), nil, 256, Buf, FP);<br>&nbsp; &nbsp; Result:= N&lt;&gt;0;<br>&nbsp; except<br>&nbsp; end;<br>end;<br><br>下面是我做的测试,请参考:<br><br>function MyFileExists(const FileName: string): Boolean;<br>var<br>&nbsp; P, F: string;<br>&nbsp; Buf: array[0..255] of Char;<br>&nbsp; FP: PChar;<br>begin<br>&nbsp; try<br>&nbsp; &nbsp; P:= ExtractFilePath(FileName);<br>&nbsp; &nbsp; F:= ExtractFileName(FileName);<br>&nbsp; &nbsp; Result:= SearchPath(PChar(P), PChar(F), nil, 256, Buf, FP) &lt;&gt; 0;<br>&nbsp; except<br>&nbsp; end;<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; S: string;<br>begin<br>&nbsp; if OpenDialog1.Execute then<br>&nbsp; begin<br>&nbsp; &nbsp; S:= 'Not Existed!';<br>&nbsp; &nbsp; if MyFileExists(OpenDialog1.FileName) then<br>&nbsp; &nbsp; &nbsp; S:= 'Existed!';<br><br>&nbsp; &nbsp; ShowMessage(S);<br>&nbsp;end;<br>end;<br>
 

巡城浪子

Unregistered / Unconfirmed
GUEST, unregistred user!
G

gcq

Unregistered / Unconfirmed
GUEST, unregistred user!
在2000中好象很多98可以用的API都不能正常用!如获取窗体后,取出EDIT中的PASSWORD!<br>
 
M

mikedeakins

Unregistered / Unconfirmed
GUEST, unregistred user!
没发现有这个问题。<br><br>我的配置:<br>Win2K Prof / Server SP2 + Delphi SP1
 
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
其实我知道FileExists的实现原理,我也知道如何解决.不过想知道有没有别的人有这种现象罢了,<br>想知道是不是我的系统有问题还是别的~~~~~~~~~~~~~赫赫~~~~~~~~~<br>给分了:<br>50'=25'(sslxml)+25'(creation_zy)
 
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
To Mikedeakins:<br>&nbsp; 赫赫,没有EMail,只好借这个方法向你Mail一下了:看乐你的Crack Component Guide,最后是<br>未完待续,赫赫,不知道续集出来了没有?我很想知道如何Crack BPL文件哦.现在就有一个这样的控件:<br>JamShellBrowser,一个封装资源管理器的控件.http://www.jam-software.com/delphi/<br>我想知道如何破解他?谢谢乐.如果不忙,就麻烦你教教我好吗?
 
M

mikedeakins

Unregistered / Unconfirmed
GUEST, unregistred user!
我的个人信息里面什么都有,eMail 地址有四个。<br><br>续集没时间写,bpl 破解的方法与我在 Crack Component 中描述的有些地方比较相像。<br>从 dcu 提取特征指令码的时候尽量不要包含调用协议。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部