function FileINUse(filename:String):boolean; var usein:file; begin result:=false; assignfile(usein,FileName); try reset(Usein); except on E:EInOutError do begin if e.ErrorCode=32 then begin result:=true; exit; end; end; end; closefile(usein); end;试试这个函数...
我试了,这个方法实现不了,xml文件无论是打开还是没有打开的状态,都是返回true。
function IsFileInUse(FileName: AnsiString): Boolean; var FileHandle: THandle; begin Result := false; FileHandle := CreateFile( PAnsiChar(FileName), 0, 0, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE or FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_READONLY or FILE_ATTRIBUTE_SYSTEM, NIL ); if (FileHandle = INVALID_HANDLE_VALUE) then Exit; CloseHandle(FileHandle); Result := true; end;
多谢回帖。试了,这个方法也判断不了xml文件是否已被打开,无论打开还是关闭状态都返回true。
XML文件即文本,如果打开文件的程序只是Load进内存就关闭了文件的话,确实文件不能算是打开状态。
function IsFileInUse(fName : string) : boolean; var HFileRes : HFILE; begin Result := false; //返回值为假(即文件不被使用) if not FileExists(fName) then exit; //如果文件不存在则退出 HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); //如果CreateFile返回失败 那么Result为真(即文件正在被使用) if not Result then //如果CreateFile函数返回是成功 CloseHandle(HFileRes); //那么关闭句柄 end;函数的调用方法:IsFileInUse(要判断的文件路径); 如果函数返回True 则正在使用,False则文件现在没被使用
function FileINUse(filename:String):boolean;
var
usein:file;
begin
result:=false;
assignfile(usein,FileName);
try
reset(Usein);
except
on E:EInOutError do
begin
if e.ErrorCode=32 then
begin
result:=true;
exit;
end;
end;
end;
closefile(usein);
end;试试这个函数...
var
FileHandle: THandle;
begin
Result := false;
FileHandle := CreateFile( PAnsiChar(FileName),
0,
0,
NIL,
OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE or
FILE_ATTRIBUTE_HIDDEN or
FILE_ATTRIBUTE_NORMAL or
FILE_ATTRIBUTE_READONLY or
FILE_ATTRIBUTE_SYSTEM,
NIL
);
if (FileHandle = INVALID_HANDLE_VALUE) then Exit;
CloseHandle(FileHandle);
Result := true;
end;
var
HFileRes : HFILE;
begin
Result := false; //返回值为假(即文件不被使用)
if not FileExists(fName) then exit; //如果文件不存在则退出
HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,
0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (HFileRes = INVALID_HANDLE_VALUE); //如果CreateFile返回失败 那么Result为真(即文件正在被使用)
if not Result then //如果CreateFile函数返回是成功
CloseHandle(HFileRes); //那么关闭句柄
end;函数的调用方法:IsFileInUse(要判断的文件路径); 如果函数返回True 则正在使用,False则文件现在没被使用
如果用word打开就能判断出来,不过好像这不是你想要的结果吧!