FileExists函数的bug(0分)

  • 主题发起人 主题发起人 eaglepsm
  • 开始时间 开始时间
E

eaglepsm

Unregistered / Unconfirmed
GUEST, unregistred user!
fileexists在判断文件的路径中,如果盘符在本地不存在,第一次它会返回false,但如果多次出现这种情况就直接退出循环,我一直没发现这个问题,今天将我的程序拿到另外一台电脑运行时出现错误:windows - 没有软盘,Exception Processing Message c0000013 Parameters 759851d8 ......
但在我的电脑上运行没出错(事后证明这是一个假象)。查了半天资料,说是中了橙色八月病毒,经过分析,才发现是FileExists函数的问题,网上一搜才发现该函数的bug还不止一个,不知大家碰到过这种情况没有
 
不知道啊,不过Windows API的OpenFile加OF_EXIST参数可以用来检测一个文件是否存在的,而我一般都有GetFileAttributes
 
我以前碰到过一次,那次是因为虚拟盘的问题,你这个看上去应该是打开的盘符是软盘或光盘的盘符,呵呵
 
function FileExists(const FileName: string): Boolean;
{$IFDEF MSWINDOWS}
begin
Result := FileAge(FileName) <> -1;
end;
{$ENDIF}

function FileAge(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
end;
end;
Result := -1;
end;
{$ENDIF}
 
bahamut8348说得对,不过打开的不是软盘,也不是光盘,而是U盘,那台电脑不知怎么有好几个可移动磁盘,可能是装机时用的移动硬盘,装完了忘了删(本来Windows应该自动删除)。
 
如果你要安全的话,你可以在判断文件前,判断一下盘符的类型,如果不是本地硬盘就直接返回FALSE或者是其他操作
 
后退
顶部