有没有办法检查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;

I found it easier to keep a boolean variable as a companion; example: bFileIsOpen. Wherever the file is opened, set bFileIsOpen := true then, whenever you need to know if the file is open, just test this variable; example: if (bFileIsOpen) then Close(datafile);

Joseph's answer works perfectly - I called the function filenotopen and changed the line if

Result := (HFileRes = INVALID_HANDLE_VALUE);

to

Result := NOT (HFileRes = INVALID_HANDLE_VALUE);

I also removed the line 'if not(Result) then begin' (and the 'end') so that it ALWAYS closes the handle or subsequent assignments and reads give errors

I now call it like this

if filenotopen(filename) then 
  begin
    assignfile(f,filename);
    reset(f)
    etc;
  end
else
  message('file open by a different program')
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top