2014-06-06 34 views
1

我的網站在轉換PDF文檔時創建了一堆png文件。我具有唯一標識的所有文件,並且希望在會話結束時刪除這些文件。我的想法是創建一個List,將它存儲在Session中,並通過存儲在我的List <>中的路徑刪除每個文件。在ASP.NET的會話結束時刪除臨時文件

在Global.asax中,我添加:

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 { } 
     } 
    } 
} 

在web.config中添加此:

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

,但文件仍坐在臨時位置。 我還沒有測試這個失敗的地方,但是在會話結束時是否有更好的常見做法來刪除臨時文件? 順便說一句,我驗證和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 - 我把預定的工作放在了我的腦後。與此同時,我只是添加了一些代碼來將Session的活動寫入文本文件。到目前爲止,我已驗證項目已正確添加並保存到會話中,並可從會話中檢索。現在我正在等待會話超時。我命令將所有異常寫入文本文件。 – ArtK