Q&A

  • 특정 텍스트화일이 이미 Open 되었는지 알고싶어요...
안녕하세요. 델파이 초보가 질문드립니다.

간단한 네트워크상에서 다수의 유저가 특정 텍스트화일을 번갈아
참조하고 Read/Write를 해야 하는데 이 텍스트화일이 이미 오픈되어
있는지를 알려면 어케야 하나요?

도와주세요...
4  COMMENTS
  • Profile
    넘버3 2003.01.08 03:10
    아래와 같이 하시면 가능할것 같네요.
    procedure OpenForShare(const FileName: String);

    var
      FileHandle : Integer;
    begin
      FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
      if FileHandle > 0 then
        {valid file handle}
        //파일이 다른 유저가 사용중이지 않습니다.
      else
        {Open error: FileHandle = negative DOS error code}
        //파일이 다른 유저가 사용중입니다.
    end;


  • Profile
    김성일 2003.01.08 08:05
    No.3 님... 테스트 목적으로 아래와 같이 테스트 했습니다.

      function OpenForShare(const FileName: String):boolean;
      var FileHandle : Integer;  beExclusive:boolean;
      begin
        beExclusive:=false;
        FileHandle := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
        if FileHandle > 0
        then beExclusive:=true
        else beExclusive:=false;
        Result:=beExclusive;
      end;

    Procedure ReadFile;
    begin
    ....
      if OpenForShare(network_path+filename) then
      begin
         Assign(txtfile, network_path+filename);
         Reset(txtfile);
         ...
      end else
      begin
         Beep;
         ShowMessage('File is occupied! Wait until.....');
      end;
    .....

    이렇게 처리했는데... 네트웍상의 모든 컴퓨터에서 파일이 읽힙니다...
    엉엉... 도와주세요
    어카면 이미 Open된 화일의 접근을 막을수 있을까요....




  • Profile
    넘버3 2003.01.09 06:27
    현재 님께서 Open되어 있는 파일을 막을려고 하시는 대상이 Local PC가 아닌 Remote PC인것 같네요. 맞나요? 그렇다면 network_path를 어떻게 선언했는지를 알아야 할것 같네요.
    만일 Local PC라면 예를 들어 현재 실행하고 있는 프로그램의 디렉토리에 있는 특정 파일(Test.exe)이라면
    FileOpen(ExtractFilePath(ParamStr(0)) + 'Test.exe'))로 하면 될것 같네요.
    아무튼 network_path가 어떤 식으로 선언한것이냐에 따라 달라질 수 있네요..
    답변이 되었는지 모르겠습니다.


  • Profile
    김성일 2003.01.09 09:12
    친절한 설명 감사드립니다.

    네트웍상의 파일 서버에 있는 특정화일의 동시 접근을 막을려고 용을쓰고 있습니다만, 같은 프로그램, 동일 세션에서 - 동일 파일의 접근이 막아지지 않네요... 네트웍 패스를 완전 동일 스트링으로 주어도 마찬가지입니다...

    OS상의 파일속정이나 점유정보를 알아내는 방법이 있으면 좋겠는데 알 수가
    없네여....

    아무튼... 거듭 감사드려요.
    (제가 뭘 잘 못했는지... 울먹 울먹, 꺼이 꺼이...)