代码之家  ›  专栏  ›  技术社区  ›  JamesSugrue

检查文件是否在Delphi中打开

  •  14
  • JamesSugrue  · 技术社区  · 17 年前

    有没有办法检查文件是否已在Delphi中通过重写打开?

    代码如下所示:

    AssignFile(textfile, 'somefile.txt');
    if not textFile.IsOpen then
       Rewrite(textFile);
    
    5 回复  |  直到 17 年前
        1
  •  17
  •   Lars Truijens    15 年前

    TTextRec(txt).Mode为您提供以下模式:

    55216 = closed
    55217 = open read
    55218 = open write
    
    fmClosed = $D7B0;
    fmInput  = $D7B1;
    fmOutput = $D7B2;
    fmInOut  = $D7B3;
    

    有关详细信息,请在系统单元中搜索TTextRec。

        2
  •  13
  •   JosephStyons    15 年前

    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;
    
        3
  •  9
  •   Ramon    14 年前

    这很好:

    function IsOpen(const txt:TextFile):Boolean;
    const
      fmTextOpenRead = 55217;
      fmTextOpenWrite = 55218;
    begin
      Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
    end;
    
        4
  •  1
  •   eh9    13 年前

    bFileIsOpen . 无论文件在何处打开,都要设置 bFileIsOpen := true 然后,当您需要知道文件是否打开时,只需测试这个变量;例子: if (bFileIsOpen) then Close(datafile);

        5
  •  -1
  •   Whitehairedgeezer    11 年前

    filenotopen 如果有可能的话,我会改变路线

    Result := (HFileRes = INVALID_HANDLE_VALUE);
    

    Result := NOT (HFileRes = INVALID_HANDLE_VALUE);
    

    我还删除了行“if not(Result)then begin”(以及“end”),这样它总是关闭句柄或后续赋值,并读取give errors

    我现在这样称呼它

    if filenotopen(filename) then 
      begin
        assignfile(f,filename);
        reset(f)
        etc;
      end
    else
      message('file open by a different program')