看它源码啊 function FileAge(const FileName: string): Integer; 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; 我贴了源码上来你不怪我吧~~
如果文件存在 返回之应该是true; 但是当创建临时文件,而且没有完全创建成功是,返回之可能为false 举个例子来说 winexec(pchar('command.com /C ping '+host+'>temp.txt'),SW_HIDE); if not fileexists('c:\temp.txt') then sleep(3000); //这里的sleep(3000)是等待文件创建成功 try memo1.lines.loadfromfile('C:\temp.txt'); except end;
function FileAge(const FileName: string): Integer;
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;
我贴了源码上来你不怪我吧~~
返回之应该是true;
但是当创建临时文件,而且没有完全创建成功是,返回之可能为false
举个例子来说
winexec(pchar('command.com /C ping '+host+'>temp.txt'),SW_HIDE);
if not fileexists('c:\temp.txt') then
sleep(3000);
//这里的sleep(3000)是等待文件创建成功
try
memo1.lines.loadfromfile('C:\temp.txt');
except
end;
操作系统是2000,单CPU,我觉得应该不会同时出现两个线程对文件进行操作,而且APP甲也只是读而已(在读文件时是做了异常处理的),现在的问题就是FILEEXISTS函数并没有异常,而是返回FALSE。这个我就觉得很疑惑了。