我对在表示不同父位置的文件夹的StorageFolder对象上调用DeleteAsync时的行为感到有些困惑。如果我要删除的文件夹的父位置是例如本地应用程序数据文件夹,我可以删除文件夹,即使它们有内容(文件和子文件夹)。如果父位置是例如文档库,我得到一个异常“目录不为空。(HRESULT异常:0x80070091)”如果文件夹不为空。
我当然宣称能够访问文档库并在应用程序清单中声明文件类型。为了证明访问这些文件(我的测试用例中的文本文件)有效,我的测试应用程序会创建文件夹并在其中创建文本文件。该应用程序甚至允许从该文件夹中删除单个文本文件。但如果父文件夹是文档库,则不允许删除整个文件夹。
有人可以解释这种不同的行为吗?它可能与假设(我不确定)相比,应用程序数据文件夹中的数据处理比其他数据(很可能是用户数据)更轻松。这种假设的一个提示是,删除应用程序数据文件夹中的文件总是永久删除它们,但在其他文件夹中删除则允许移动到回收站。
修改 这是我的测试应用:www.juergen-bayer.net/Downloads/FolderDeletionTest.zip
答案 0 :(得分:1)
你描述的行为对我来说似乎非常明智。应用程序本地文件夹归您的应用所有,理论上它的所有内容都可供您的应用随时使用。嵌套文件夹删除就是一个很好的例子。您的应用应该能够删除所有自己的数据,包括删除非空文件夹。
然而,用户的文档文件夹是一个非常不同的野兽。您的用户无法停止(甚至难以)将内容添加到您使用应用创建的文件夹中。只需打开资源管理器就可以访问该文件夹的内容。如果您的应用想要在此处删除文件夹,则必须确保在删除文件夹之前文件夹中没有用户创建的文档。在代码中删除时添加此额外障碍应该使开发人员考虑他们将要采取的操作,如果不是实际阻止他们逐个删除内容。
因此,简而言之:您的应用程序拥有自己的文件夹,并且可以像自己喜欢的数据一样骑自行车。它不拥有文档库,因此您不能一次性删除整个文件夹。
答案 1 :(得分:0)
这个文件夹中的某些文件或目录似乎是由其他线程/应用程序甚至代码加入的。尝试逐个删除文件我认为你会收到访问错误。