2012-01-19 2 views
4

차례로 DLL에 액세스하는 프로그램이 있습니다. 여러 가지 방법으로 파일을 사용하고 파일을 작성하고 복사 한 다음 emailMessage 객체의 첨부 파일로 설정합니다. 파일을 덮어 쓰지 못하게하는 '사용중인 파일'오류가 있습니다.C#에서 파일 핸들 디버깅 문제. NET

처리를 용이하게하는 도구 나 기술이 있습니까? 예 : 특정 문자열을 포함하는 핸들의 생성/제거와 같은 경고? 프로세스 탐색기, 프로세스 모니터 (filemon의 후속 버전) 등을 살펴 보았지만 행운은 없습니다.

나는 사냥을 계속할 수는 있지만 코드를 통해 비공식 조사를 계속하는 것보다 더 나은 접근 방법이 될 수 있다고 생각합니다. 의견에 대한

편집

감사합니다. 질문에 관해서는 구조가 조금 복잡합니다. 나는 '엔진'dll (C#도)을 참조하는 '클라이언트'앱을 가지고있다. 둘 다 제 자신입니다. 클라이언트는 다양한 파일에 대한 파일 참조를 포함하는 '첨부 파일'의 인스턴스를 만듭니다. 그 생성자는 참조 된 파일을 잡고 임시 폴더에 복사본을 저장합니다. 나중에 일련의 '작업'이 이메일을 작성합니다. 각 첨부 파일을 EmailMessage 객체에 대한 '실제'첨부 파일로 추가합니다. 여러 번 객체를 처리하고 null에 대한 참조를 설정하지만 너무 빨리 수행하면 null 참조 예외로 끝납니다. 너무 늦게하면 저주받은 물건들이 사용 중입니다! 나는이 특정 버그를 당연히 발견 할 수있을 것이라고 확신하지만, 알고있는 사람들이 사용하는 유용한 표준 방법이 있는지 궁금해하게되었습니다. :)

+0

내 첫 번째 생각은 프로세스 탐색기를 권장하는 것이었지만 이미 시도해 보았습니다. 안돼, 안 그래? –

+0

응용 프로그램 내에서 파일 (Filestream 등)에 대한 핸들이 완전히 생성 되었습니까? 아니면 외부 프로세스가 관련되어 있습니까? –

+1

파일 사용 중 오류가 발생했습니다. 파일을 호출/생성하는 코드에 액세스 할 수 있습니까? 그렇다면 제대로 릴리스되지 않았거나 C# 코드 인 경우 파일 스트림을 새로 작성하면 잘못 될 수 있습니다. 파일/첨부 파일을 만드는 코드 예제가 있습니까?이 DLL 관리 코드 또는 관리되지 않는 코드 .. ?? – MethodMan

답변

2

디버깅 중에 파일을 잠그는 기능을 알려주는 도구를 찾는 것처럼 들립니다. 그렇다면 Unlocker을 사용하여 파일 잠금 프로세스를 결정할 수 있습니다.

3

Procmon은 파일을 여는 사용자 (즉, 어떤 프로세스)와 파일을 여는 장소의 (관리되지 않는) 스택을 알려줍니다.

C#/.NET에서이 문제의 일반적인 원인은 파일 스트림을 열고 사람들이 파일 스트림을 끝내면 처리하지 않는 것입니다. 이것은 파일이 (적어도) 다음 가비지 콜렉션이 될 때까지 열려 있다는 것을 의미합니다.

+2

IDisposable 및 블록 바위를 사용합니다. – kenny

+0

감사합니다. 나는 동의한다; 하지만 전자 메일에 첨부 할 수있을만큼 오래 객체를 보관해야합니다 (위의 편집 참조). – Glinkot