2012-10-17 32 views
2

當在表示不同父級位置中的文件夾的StorageFolder對象上調用DeleteAsync時,我對此有些困惑。如果要刪除的文件夾的父位置是本地應用程序數據文件夾,則即使它們具有內容(文件和子文件夾),我也可以刪除它們。如果父位置是例如文檔庫,那麼我得到一個異常「目錄不爲空(來自HRESULT的異常:0x80070091)」,如果該文件夾不是空的。Windows運行時:StorageFolder.DeleteAsync在從不同位置刪除時的不同行爲

我當然聲明能夠訪問文檔庫並在應用程序清單中聲明文件類型。爲了證明訪問這些文件(我的測試用例中的文本文件)能夠運行,我的測試應用程序將創建該文件夾並在其中創建文本文件。該應用程序甚至允許從文件夾中刪除單個文本文件。但是,如果父文件夾是文檔庫,則不允許刪除整個文件夾。

有人可以解釋這種不同的行爲?這可能與假設(我不確定)有關,應用程序數據文件夾中的數據處理比其他數據(最有可能是用戶數據)更容易處理。這種假設的一個提示是,刪除應用程序數據文件夾中的文件始終將其永久刪除,但在其他文件夾中刪除允許移動到回收站。

編輯: 這裏是我的測試程序:www.juergen-bayer.net/Downloads/FolderDeletionTest.zip

回答

1

你描述的行爲似乎對我來說非常明智。應用程序本地文件夾屬於您的應用程序,理論上它的所有內容都可供您的應用程序隨意使用。刪除嵌套文件夾就是一個很好的例子。你的應用程序應該能夠刪除它認爲合適的所有數據,包括刪除非空文件夾。

然而,用戶的文檔文件夾是一個非常不同的野獸。沒有任何東西可以阻止(甚至使得用戶難以將內容添加到您使用您的應用創建的文件夾中)。只需打開資源管理器將允許他們訪問文件夾的內容。如果您的應用程序想要在此刪除文件夾,則必須確保在刪除文件夾之前沒有用戶創建的文檔。在代碼中刪除時添加這個額外的障礙應該使開發人員考慮他們即將採取的行動,如果不是實際上阻止他們逐個刪除內容。

簡而言之:您的應用程序擁有自己的文件夾,並且可以像對自己的數據一樣喜歡騎士。它不擁有文檔庫,因此您無法一次性刪除整個文件夾。

+0

感謝您的詳細解釋。我在同一條路上,但沒有想到它通過。文檔庫的好處。雖然這種行爲沒有記錄,但我認爲原因正是你指出的。 –

0

看來,此文件夾中的一些文件或目錄在這個時候被其他線程/應用程序,甚至你的代碼accesed。嘗試逐個刪除文件我認爲你會收到訪問錯誤。

+0

情況並非如此。這些文件絕對不會被另一個線程或進程訪問。我的測試應用程序首先在文檔庫和本地應用程序數據文件夾中創建測試文件。然後刪除一個文本文件以證明刪除文件是可能的(這是)。但是當試圖刪除整個文件夾時,應用程序不允許刪除文檔庫中的文件夾。爲了證明它不是訪問問題,應用程序會先刪除文件夾中的文件夾,然後刪除文件,然後刪除空文件夾(工作原理)。在編輯的問題中查看我的測試應用程序鏈接。 –

相關問題