在读config.xml文件文件时,怎样判断是否有人在用这个xml文件,即判断xml文件是否处于打开状态。请各位高手指点。

解决方案 »

  1.   


    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;试试这个函数...
      

  2.   

    我试了,这个方法实现不了,xml文件无论是打开还是没有打开的状态,都是返回true。
      

  3.   

    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;
      

  4.   

    多谢回帖。试了,这个方法也判断不了xml文件是否已被打开,无论打开还是关闭状态都返回true。
      

  5.   

    XML文件即文本,如果打开文件的程序只是Load进内存就关闭了文件的话,确实文件不能算是打开状态。
      

  6.   

    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则文件现在没被使用
      

  7.   

    我记得rtf文档打开可以判断,你这个xml文件就不行了。
      

  8.   

    如果你的xml文档用记事本打开那是判断不出来的,大家也都讲过了。
    如果用word打开就能判断出来,不过好像这不是你想要的结果吧!
      

  9.   

    是的,我还是使用xml的。不好判断。谢谢大家了。