Windows runtime Windows运行时:从不同位置删除时StorageFolder.DeleteAsync的不同行为

Windows runtime Windows运行时:从不同位置删除时StorageFolder.DeleteAsync的不同行为,windows-runtime,windows-store-apps,Windows Runtime,Windows Store Apps,在代表不同父位置文件夹的StorageFolder对象上调用DeleteAsync时,我对DeleteAsync的行为感到有点困惑。如果要删除的文件夹的父位置是例如本地应用程序数据文件夹,则即使文件夹包含内容(文件和子文件夹),我也可以删除这些文件夹。例如,如果父位置是文档库,则如果文件夹不为空,则会出现异常“目录不为空。(来自HRESULT的异常:0x80070091)” 我当然声明了访问文档库的能力,并在应用程序清单中声明了文件类型。为了证明访问这些文件(我的测试用例中的文本文件)是有效的,

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

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

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

编辑:
这是我的测试应用程序:

看起来这个文件夹中的一些文件或目录此时被其他线程/应用程序甚至您的代码访问了。尝试一个接一个地删除文件,我想你会收到访问错误

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

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


因此,简而言之:你的应用程序拥有自己的文件夹,并且可以随意处理自己的数据。它不拥有文档库,因此您不应该一下子删除整个文件夹中的文件。

事实并非如此。这些文件肯定不会被其他线程或进程访问。我的测试应用程序首先在文档库和本地应用程序数据文件夹中创建测试文件。然后它删除一个文本文件,以证明删除文件是可能的。但当尝试删除整个文件夹时,不允许应用程序删除文档库中的文件夹。为了证明这不是一个访问问题,应用程序然后删除文档文件夹中的文件夹,首先删除文件,然后删除空文件夹(它可以工作)。查看编辑问题中的“我的测试应用程序”链接。感谢您的详细解释。我走的是同一条路,但没有想清楚。文档库的优点。虽然这种行为没有记录在案,但我认为原因正是你所指出的。