有没有办法检查文件是否已被 Delphi 中的 ReWrite 打开?
代码会是这样的:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
你可以得到文件模式。(一会儿,我将创建一个示例)。
TTextRec(txt).Mode 为您提供模式:
55216 = closed
55217 = open read
55218 = open write
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
在系统单元中搜索 TTextRec 以获取更多信息。
试试这个:
function IsFileInUse(fName: string) : boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(fName) then begin
Exit;
end;
HFileRes := CreateFile(PChar(fName)
,GENERIC_READ or GENERIC_WRITE
,0
,nil
,OPEN_EXISTING
,FILE_ATTRIBUTE_NORMAL
,0);
Result := (HFileRes = INVALID_HANDLE_VALUE);
if not(Result) then begin
CloseHandle(HFileRes);
end;
end;
这工作正常:
function IsOpen(const txt:TextFile):Boolean;
const
fmTextOpenRead = 55217;
fmTextOpenWrite = 55218;
begin
Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
end;
我发现将布尔变量作为伴侣更容易;例子:bFileIsOpen
。无论文件在哪里打开,bFileIsOpen := true
然后设置,每当您需要知道文件是否打开时,只需测试此变量即可;例子:if (bFileIsOpen) then Close(datafile);
约瑟夫的回答完美 - 我调用了这个函数filenotopen
并改变了如果
Result := (HFileRes = INVALID_HANDLE_VALUE);
到
Result := NOT (HFileRes = INVALID_HANDLE_VALUE);
我还删除了“如果不是(结果)然后开始”(和“结束”)行,以便它总是关闭句柄或后续分配并读取给出错误
我现在这样称呼它
if filenotopen(filename) then
begin
assignfile(f,filename);
reset(f)
etc;
end
else
message('file open by a different program')