2

在代表不同父位置的文件夹的 StorageFolder 对象上调用 DeleteAsync 时,我对它的行为感到有些困惑。如果我要删除的文件夹的父位置是例如本地应用程序数据文件夹,我可以删除文件夹,即使它们有内容(文件和子文件夹)。例如,如果父位置是文档库,如果文件夹不为空,我会收到异常“目录不为空。(来自 HRESULT 的异常:0x80070091)”。

我当然声明了访问文档库的能力,并在应用程序清单中声明了文件类型。为了证明访问这些文件(我的测试用例中的文本文件)有效,我的测试应用程序创建了文件夹并在其中创建了文本文件。该应用程序甚至可以从文件夹中删除单个文本文件。但是如果父文件夹是文档库,则不允许删除整个文件夹。

有人可以解释这种不同的行为吗?这可能与假设(我不确定)应用程序数据文件夹中的数据比其他数据(很可能是用户数据)更轻松地处理有关。这种假设的一个提示是,删除应用程序数据文件夹中的文件总是会永久删除它们,但在其他文件夹中删除则允许移动到回收站。

编辑: 这是我的测试应用程序:www.juergen-bayer.net/Downloads/FolderDeletionTest.zip

4

2 回答 2

1

你描述的行为对我来说似乎非常明智。应用程序本地文件夹归您的应用程序所有,理论上它的所有内容都可供您的应用程序随意使用。嵌套文件夹删除就是一个很好的例子。您的应用应该能够删除它认为合适的所有数据,包括删除非空文件夹。

然而,用户的文档文件夹是一个非常不同的野兽。没有什么可以阻止(甚至难以)您的用户将内容添加到您使用您的应用程序创建的文件夹中。只需打开资源管理器,他们就可以访问文件夹的内容。如果您的应用想要在此处删除文件夹,您必须在删除之前绝对确定该文件夹中没有用户创建的文档。在代码中删除时添加这个额外的障碍应该让开发人员考虑他们将要采取的行动,如果不是真的阻止他们逐一删除内容的话。

因此,简而言之:您的应用程序拥有自己的文件夹,并且可以随心所欲地处理自己的数据。它不拥有文档库,因此您不应该一次删除充满文件的整个文件夹。

于 2013-01-06T10:07:05.060 回答
0

似乎这个文件夹中的某些文件或目录此时已被其他线程/应用程序甚至您的代码访问。尝试一一删除文件我认为您会收到访问错误。

于 2013-01-05T13:06:26.277 回答