제게 타사를 일으키는 제 3 자 JPEG/EXIF 조작 라이브러리 (Mediautil)로 작업하고 있습니다. 이미지의 EXIF 데이터를 변경하고 싶습니다. 이렇게하려면 업데이트 된 버전을 임시 파일에 쓰고 원본을 삭제 한 다음 임시 파일의 이름을 원래 이름으로 바꿔야합니다.false를 반환하는 File.delete() 진단 방법/닫히지 않은 스트림 찾기?
내 문제는 File.delete()
호출이 실패하고 false
을 반환한다는 것입니다. 라이브러리가 여전히 어떤 방식 으로든 열렸기 때문일 수 있습니다.하지만 API에서 모든 스트림을 닫을 수있는 모든 작업을 수행했습니다. 심지어 악화 : 문제는 타이밍에 따라 달라질 수 있으며 Unit 테스트는 때때로 실패하고 때로는 실패합니다. 코드는 이 아니며 다중 스레드입니다.
기괴하게도 문제를 제거하는 라이브러리 호출이 하나 있지만 실제로 원하지 않는 EXIF 축소판도 제거됩니다. 그리고 코드를 보면, 그렇지 않으면 열어 둘 수있는 스트림을 어디에 닫을 수 있는지 전혀 알 수 없습니다.
이 아이디어를 공격하는 방법은 무엇입니까?
편집 : 은 Windows XP, 자바 (6) 그리고 또 다른 한가지에 : 나는 File.delete()
를 호출하기 전에 System.gc()
를 호출하는 경우, 그것이 작동하는 것을 발견했다 - 그 어떤 종료자를 트리거 아마도 때문이다. 그래서 그것은 명확히 닫히지 않은 흐름 인 것처럼 보인다.
당신은 안티 바이러스 시스템에서 실행이 있습니까? 때로 AV는 파일을 작성한 후 일시적으로 파일을 열 수 있으므로 삭제하려고하는 순간에 때때로 "불행한"경우가있는 산발적 인 행동을 유발할 수 있습니다. –
어떤 플랫폼에 있습니까? –
@ Neeil 좋은 생각이지만 AV를 끄지 않아도 효과가있었습니다. –