2014-09-22 6 views
-1

파일 (.pdf)과 아주 작은 메타 데이터 파일을 네트워크 위치로 내보내는 Delphi5 응용 프로그램이 있습니다. 이 두 파일은 폴링 .NET 응용 프로그램에서 처리하고 제거해야합니다.예기치 않은 'File In Use'오류가 발생할 수있는 이유

내 접근 방식은

을에 .dat하기 위해 .part 파일 이름 바꾸기 .PDF

  • 생성 확장 '.part'
  • 와 메타 데이터 파일을 작성

    1. 이다 .NET 프로세스는 확장자가 '.dat'인 파일 만 찾고 있으므로 두 개의 리더/라이터간에 충돌이 없을 것으로 예상됩니다. 그러나, .NET 프로세스가 때때로 다음과 같은 오류를 로깅 ...

      System.IO.IOException: The process cannot access the file '\\server\Path\FileName.dat' because it is being used by another process.

      는 (I 가끔 말 - 우리가 현재 볼륨이이 문제의 훨씬 더 될 수 증가 그렇게 할 때, 테스트)

      델파이 코드는 다음과 같다 :

      AssignFile(FTextFile, Format('%s\%s.part', [DMSPath, FullFileName])); 
      try 
          try 
          ReWrite(FTextFile); 
          Writeln(FTextFile, MetaDataString); 
          finally 
          CloseFile(FTextFile); 
          end; 
      except 
          raise ELogFileException.Create(LOGFILEWRITEFAILURE); 
      end; 
      

      그럼 다음 줄의 코드를 실행하는 별도의 방법이

      12,

      이 코드 본질적으로 잘못 아무것도 볼 수없고 우리가 염두에두고 치료의 몇 가지있다,하지만 난

      1. 가 좀 더 안정적으로 파일 '.DAT'를 보호하기 위해 다른 방법을 시도해야 2 개 질문이 그것이 완전히 준비 될 때까지
      2. 어떤 상황이 이것을 일으킬 수 있습니까? 바이러스 백신 소프트웨어 -

    2. 지금까지 한 건의 원인이되고있다.

      파일이 어떻게 다르게 생성 될지에 대한 제안 사항이 있으십니까? 내 응용 프로그램은 Delphi5입니다. 나는 내가 사용할 수있는 'MoveFileA'WinApi 호출의 더 새로운,보다 원자적인 버전이 있는지 궁금해했다.

  • +1

    일반적인 원인은 내 AV 소프트웨어입니다. –

    +0

    감사합니다. @David - 나는 그것에 대해 생각하지 않았습니다. –

    +0

    Windows Search가이 문제의 원인 이었지만 최근에 보았으므로 지금 고칠 수도 있습니다. 이것이 원인 일 경우, 작성한 파일에 "색인하지 않음"속성을 설정하여 문제를 해결할 수 있습니다. – arx

    답변

    0

    예전에는 파일이 잠긴 것과 같은 문제가있었습니다. 조사가 Windows의 Prefetch를 가리켰습니다. 영향을받는 파일은 네트워크 디렉토리에 없었습니다.

    내가 아는 한 Prefetch는 프로세스 시작 및/또는 부팅 중 (레지스트리 키로 제어 됨)에서만 작동하므로 현재 상황에는 적용되지 않을 수 있습니다.

    "C : \"Windows "\ Prefetch \"디렉토리를 확인할 수 있습니다. 프리 페치가 활성화되어 있으면 여러 개의 * .pf 파일이 있어야합니다. 실행 파일 이름이있는 경우 조사하는 것이 좋습니다.

    0

    개인적으로 말하자면, 여러 파일이 관련되어 있으므로 먼저 작성하는 별도의 잠금 파일 (예 : myfile.lck)을 만듭니다. 폴링 응용 프로그램이 폴더에서 폴링 응용 프로그램을 발견하면 다른 파일을 찾지 않습니다. 일단 그 파일이 사라지면, 그것은 더 깊어집니다. 나는 이것이 당신이 겪고있는 문제를 해결할 수 있을지 모르지만, 시도해 볼 것입니다. (.dat 확장은 악의적 인 악의적 인 행위자에 의해 자주 생성되므로 AV 소프트웨어와 같은 다른 소스를 통해 허위의 문제를 제기 할 수 있습니다. 0 바이트의 잠금 파일은 일반적으로 무해하고 무시됩니다.)

    +1

    문제를 지연시키지 않겠습니까? 소비자 응용 프로그램이 잠금 파일을 찾기 위해 변경된 경우에도 여전히 dat 파일을 읽어야하므로 dat 파일을 사용할 가능성이 여전히 있습니다. 소비자 응용 프로그램에서 파일이 다른 프로세스에서 계속 사용 중이라고 말하면 프로세스가 무엇인지 알 수 없습니다. 프로듀서 응용 프로그램이라고 가정하고 있다고 생각합니다. 어쨌든, 제작자는 이름을 바꾸기 전에 dat 파일을 이미 닫았습니다. –

    +1

    내 말을 믿지 마십시오. 이것은 유닉스/리눅스 시스템이 영원히 그것을 한 방법입니다. 근본적으로 동시성 문제를 지적하고 있습니다. 어떤 종류의 깃발을 사용해야합니다. 파일 생성 작업은 일반적으로 원자 단위로 간주됩니다. 파일이 작성되었다는 리턴 코드를 받거나 파일이 이미 존재 함을 나타내는 오류 코드를받습니다. 존재하는 경우, 진행하지 마십시오. 생성 한 경우 계속 진행하는 것이 안전합니다. 완료되면 삭제하십시오. –

    +0

    분명히이 프로토콜을 따르지 않고 다른 파일에 액세스하는 다른 앱이있는 경우에는이 기능이 작동하지 않습니다. 다시 말하지만 .dat 파일은 맬웨어에 의해 자주 만들어 지므로 AV 소프트웨어 인 경우이 작업을 수행 할 수 있는지 여부는 알지 못합니다. –