2016-09-02 9 views
0

에 asp.net MVC에서 파일을 해제 할 수 없습니다 여기에 내가 만든 함수입니다 :는 IIS

if (Valide()) 
{ 
    try 
    { 
     File.Delete(Server.MapPath("F16client.pdf")); 
    } 
    catch 
    { 
    } 

    using (FileStream ms = new FileStream(Server.MapPath("F16client.pdf"), FileMode.Create, FileAccess.Write, FileShare.None)) 
    { 
     PdfReader lecteur = new PdfReader(Server.MapPath("~/Formulaires/f16.pdf")); 

     PdfStamper etampeur = new PdfStamper(lecteur, ms); 

     // DO STUFF, Whatever 

     etampeur.FormFlattening = true; 
     etampeur.Close(); 
     lecteur.Close(); 

     System.Net.Mail.Attachment at = new Attachment(Server.MapPath("F16client.pdf"));            
    } 
} 

지역 테스트 할 때 그것은 작동하지만 IIS에서이 W3W 과정 내 f16client의 가자하지 않습니다. pdf와 나는 항상 다음과 같이 끝납니다 :

다른 프로세스에서 사용되고 있기 때문에 프로세스가 'D : \ inetpub \ wwwroot \ Formulaire16 \ F16client.pdf'파일에 액세스 할 수 없습니다.

IIS에서 로컬 파일을 테스트 할 때 해당 파일을 계속 사용하는 이유는 무엇입니까?

+0

다른 곳에서 파일을여시겠습니까? – Jecoms

+1

using 문에서이 행을 이동하면 어떻게됩니까? System.Net.Mail.Attachment at = 새 첨부 파일 (Server.MapPath ("F16client.pdf")); – Sparrow

+0

대신 Temp 파일을 만드는 것이 좋습니다 - 코드가있는 것처럼 몇 가지 문제가 있습니다. –

답변

0

음 ... 여기에는 마법이 없습니다. 함수의 끝나기 전에

at.Dispose(); 

좋은 ALLS : 문제를 지적 Feryal Badili 덕분에, 이메일 첨부 파일은 ... 그래서

, 간단한 실제로 ressource을 보유하고 무언가이다. 그래 ...

로컬에서 작동하는 이유는 아마도 내가 테스트 할 때마다 stop everything 버튼을 누를 때였 기 때문일 수 있습니다. 따라서 내 기능을 시도 할 때마다 핸들을 죽이고있었습니다.

0

IIS의 응용 프로그램 풀 사용자에 대한 액세스를 확인하십시오. 그런 다음 아래 코드로 다시 시도하십시오.

var file = Server.MapPath("F16client.pdf") 
File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

권한 또는 파일 특성 문제 일 수 있습니다.

+0

감사합니다. 조언을 위해, 필자는 웹 응용 프로그램이 소유하고있는 파일에 대해 100 % 제어권을 갖고 있지만 권리와 특성을 확인하기위한 좋은 습관이 있음을 확인했습니다. –