2014-03-28 107 views
1

我已經使用IsolatedStorageFile類的DeleteFile方法從IsolatedStorage中刪除文件。有時這種方法會拋出IsolatedStorageException。我提到的MSDN頁面說,當「目標文件打開或路徑不正確時,拋出此異常」。如何知道IsolatedStorage中的文件是否已經打開?

要檢查文件是否真的存在,我可以在調用DeleteFile方法之前調用IsolatedStorageFile.FileExists方法。

但是我怎麼知道我想刪除的文件是否打開?我想知道,因爲這可能是爲什麼我得到的除外)


更新1:我想我的運行應用程序的多個實例。

回答

2

顯然,您正在同時打開隔離存儲中包含應用程序多個實例的文件,並嘗試刪除該文件。那麼,你的問題。如果您的應用程序的另一個實例打開了該文件,則無法刪除該文件。

這裏是你可以做什麼:

  • 使用互斥做到進程間同步see MSDN,並與其他應用程序實例檢查,如果它是確定要刪除的文件。
  • 只允許你的應用程序的一個實例來運行(儘管你explcitly說你想要的多個實例,您可能要重新考慮)
  • 使用一個單獨的文件爲每個應用程序實例

哪種解決方案使用取決於您的應用程序的工作方式以及文件的用途。

編輯:您不能檢查文件是否刪除它,因爲該文件可以檢查和刪除之間的另一個應用程序實例中打開之前打開。

If(!FileIsOpen(path)) 
{ 
    // here, another application may open the file 

    DeleteFile(path); // oops 
} 

可以做的是什麼:

try 
{ 
    DeleteFile(path); 
} 
catch(IsolatedStorageException) 
{ 
    // do nothing; let the other instances try and delete the file. 
} 
+0

感謝@helb您的時間和答案。我upvoted! :) 吃掉異常,假設其他實例將刪除它,可能是一個策略。它幾乎每次都能正常工作,除非應用程序的最後一個實例拋出異常(因爲不會有任何實例會繼續前進並按照我們的假設將其刪除)。 – Learner

相關問題