2014-06-06 5 views
1

내 웹 사이트는 pdf에서 문서를 변환하는 동안 많은 png 파일을 만듭니다. 고유하게 식별 된 모든 파일을 가지고 있으며 세션 종료시 해당 파일을 제거하려고합니다. 내 생각은 목록을 만들어 세션에 저장하고 내 목록 <에 저장된 경로별로 각 파일을 삭제하는 것이 었습니다. ASP.NET에서 세션 종료시 임시 파일 삭제

은 Global.asax에 나는 추가 : Web.config의에서

void Session_End(object sender, EventArgs e) 
{ 
    if (Session["cleanUpCollection"] != null) 
    { 
     List<String> deletePaths = ((List<string>)(Session["cleanUpCollection"])); 
     foreach(String s in deletePaths) 
     { 
      try 
      { 
       System.IO.File.Delete(s); 
      } 
      catch { } 
     } 
    } 
} 

나는이 추가 :

<sessionState mode="InProc" cookieless="false" timeout="20" /> 

하지만 파일은 여전히 ​​임시 위치에 앉아있다. 아직 실패한 부분을 테스트했지만 세션 종료시 임시 파일을 삭제하는 것이 더 좋습니다. BTW, 내가 확인하고 cleanUpCollection은 로컬 서버의 경로를 저장하므로 파일 경로에 오류가 없습니다.

+0

당신이이 일을하는 방식이 나에게 의미가 있습니다. 파일이 아직 사용 중이 아닌지 확인 하시겠습니까? Image 클래스와 Bitmap 클래스에는 참조에 매달리는 것과 같은 특정 메소드가 있습니다. 클래스를 삭제하지 않으면 파일 참조가 여전히 열려 있으며 세션 종료시 파일 삭제가 실패합니다. –

+0

[이것은 일종의 유형입니다] (http://stackoverflow.com/q/11408857/656243) 나는 얘기하고있다. –

+0

[여기 같은] (http://stackoverflow.com/q/3661799/656243). –

답변

0

타임 아웃을 20으로 설정하면 세션이 중단되고 코드가 실행되기 전에 20 분이 걸릴 것입니다. 또한 Session_End 이벤트는 세션이 유휴 상태가 아니면 다른 페이지로 이동하거나 브라우저를 닫을 때 실행되지 않으므로이 코드가 항상 디렉토리를 정리하지 않을 수 있습니다.

삭제하기 전에 사용자 세션이 끝날 때까지 기다리는 것이 아니라 PDF가 만들어지면 파일을 삭제하는 것이 좋습니다.

+1

-1 Session_End 이벤트는 세션 시간 초과 후 항상 시작됩니다. 사용자가 다른 페이지를 탐색하거나 브라우저를 닫을 때 코드가 디렉토리를 정리하지 않을 수도 있다고 말하는 것은 맹목적으로 잘못된 것입니다. –

+0

@ sharpguru - 설명을 위해 .png 파일을 삭제합니다. 플랫폼에 관계없이 모든 브라우저에서 볼 수 있도록 PDF를 PNG로 변환합니다. – ArtK

3

이보다 강력한 방법은 서버 외부에서 (사이트 외부에서) 예약 된 작업을 실행하여이 폴더를 정기적으로 정리하고 특정 연령보다 오래된 파일을 제거하는 것입니다. 이것에 대한 세션 타임 아웃에 의존하는 것은 이상적이지 않습니다.

또한 어떤 오류가 발생했는지 또는 파일이 삭제되지 않은 이유를 알려주지 않았 음을 알려드립니다. 그것에 대한 더 많은 도움을 받으려면 몇 가지 정보를 제공해주십시오.

+1

+1 나는이 접근법을 좋아합니다. –

+0

@Paddy - 나는 내 머리 뒤에서 예정된 일을 지켰다. 그동안 텍스트 파일에 세션의 활동을 작성하는 코드를 추가했습니다. 지금까지 항목이 올바르게 추가되어 세션에 저장되었으며 세션에서 검색 될 수 있음을 확인했습니다. 이제 세션이 시간 초과 될 때까지 기다리고 있습니다. 모든 예외를 텍스트 파일에 기록하도록 명령했습니다. – ArtK