파일을 열려고 시도하지 않고 파일이 "작성 중"인지 "완료 복사 중"인지 C#에서 알 수있는 방법이 있습니까?파일 복사가 진행 중인지 확인하는 방법은 무엇입니까?
답변
FileInfo 클래스는 이러한 콜백을 지원하지 않습니다. 아마도 자신 만의 클래스를 작성하여이 작업을 수행 할 수 있습니다. 한번보세요 http://www.pinvoke.net/default.aspx/kernel32.CopyFileEx
파일을 처리하는 프로세스에 따라 달라집니다 - 예를 들어 복사를 시작하고 파일 복사가 완료되었는지 확인하려고한다면?
다른 프로세스가 파일을 쓰려고 할 때 해당 상태를 캡처하려고합니다. -이 경우 기술적으로 불가능합니다. 파일 시스템이 파일을 완전히 쓰지 않는 한 핸들을 제공하지 않기 때문입니다.
파일이 이미 존재하고 다른 프로세스가 파일에 쓰는 경우 - 내용을 가져올 준비가되지 않은 것입니다. 프로세스가 실제로/overwrite를 시도하지 않는 한 기술적으로 파일에 잠금이 없습니다.
더 구체적으로 질문하십시오
답장을 보내 주셔서 감사합니다. 예, 필수 사항은 두 번째입니다. 예를 들어, 다른 프로세스가 파일을 쓰려고 할 때 그 상태를 캡처하려고합니다. -이 경우 기술적으로 불가능합니다. 파일 시스템이 파일을 완전히 쓰지 않는 한 핸들을 제공하지 않기 때문입니다. – Srivani
정확한 문제는 : 하나의 프로세스는 파일을 폴더로 복사합니다. 다른 프로세스는 해당 파일이 해당 폴더에 있음을보고 다른 위치로 전송하려고 시도합니다. – Srivani
우리가 필요로하는 것은 파일을 복사 할 때, 다른 위치로 전송하려고하는 다른 프로세스에 나열되거나 발견되어서는 안됩니다. – Srivani
파일을 복사하는지 또는 다른 응용 프로그램에서 수행하는지 여부와 같은 자세한 정보를 제공해주십시오. 'FileWatcher'를 체크 아웃 했습니까? – Saravanan
안녕하세요 Saravanan. 답장을 보내 주셔서 감사합니다. 예 파일이 수동으로 복사됩니다. 그러나 새 파일이 (파일 이름, 크기) 조합으로 발견되면 일부 서비스는 폴더 모니터링을 계속하고 db에 항목을 입력합니다. 무슨 일이 일어나고, 파일을 복사 할 때 파일 크기가 0으로되고 파일 복사가 끝난 서비스가 파일의 실제 크기를 가져 오는 서비스입니다. 그래서 서비스는 1 개의 파일에 대해 0 크기 및 실제 크기로 DB에 2 개의 항목을 삽입합니다. – Srivani