2013-05-09 9 views
-4

내 스레드가 PDF 파일을 삭제할 수 없습니다. 이 솔루션을 디버깅 할 때 파일이 삭제됩니다. 서비스 모드에서는 삭제되지 않습니다.C#의 스레드를 사용한 파일 삭제

이 내 예제 코드입니다 :

Thread Worker = new Thread(new ThreadStart(Start)); //Main Function 
Worker.Start(); 

public void Start() 
{ 
    string text=PDFToText(@"C:\1.pdf"); 
    File.Delete(@"C:\1.pdf"); 
} 

private string PDFToText(string filename) // My PDF reader function 
{ 
    PDDocument doc = PDDocument.load(filename); 
    PDFTextStripper stripper = new PDFTextStripper(); 
    string text = stripper.getText(doc); 
    doc.close(); 
    return text; 
} 

문제가?

+0

예외가 있습니까? – Odys

+0

아니요. 예외가 없습니다 ... – user2335414

+0

어떤 예외가 발생합니까? – Kai

답변

2

아마도 일어날 수있는 것은 파일 (아마도 사용중인 API)이 파일을 잠그고 삭제를 방지한다는 것입니다.

이 "느린"페이스로 스테핑이므로 디버그 및 단계별로이 작업을 수행하면 잠금이 해제되고 파일이 성공적으로 삭제됩니다.

예외 처리기를 사용하여 재시도 루프에 삭제 코드를 삽입해야합니다. 예외 처리기는 잠시 동안 잠자기 한 다음 다시 시도하여 OS가 잠금을 해제 할 수있는 기회를 제공합니다.

프로덕션 중일 때 서비스로 실행한다고 가정 할 때 비주얼 스튜디오를 통해 디버깅 할 때와 다른 서비스 계정이 다른 사용자 계정으로 실행됩니다 (서비스에 연결하지 않는다고 가정 할 때). - 여기서 말하기는 어렵습니다). 서비스가 실행중인 계정에 처음부터 파일을 삭제할 수있는 권한이 있는지 확인하십시오.