【问题标题】:StorageFile throws error on renaming when got from OnFileActivated?从 OnFileActivated 获取 StorageFile 时重命名时抛出错误?
【发布时间】:2019-08-15 16:05:58
【问题描述】:

当我尝试重命名从 OnFileActivated 获取的 StorageFile 时,我的 UWP 应用抛出 System.UnauthorizedAccessException: Access is denied 错误,如下所示。

protected async override void OnFileActivated(FileActivatedEventArgs args)
{
    //----------------< OnFileActivated() >---------------- 
    //* when opened by file-extension 
    base.OnFileActivated(args);

    StorageFile file = (StorageFile) args.Files[0];
    await file.RenameAsync("hello.jpg"); //It throws error
    await file.DeleteAsync(); //It works
    return;
}

这似乎很奇怪,因为DeleteAsync 毫无例外地工作。如果文件是只读的,我如何删除该文件?如果文件不是只读的,为什么我无法重命名它?

场景: OnFileActivated 方法用于在用户单击具有应用程序注册的扩展名的文件时检索文件以进行处理。更多信息:https://docs.microsoft.com/en-us/windows/uwp/launch-resume/handle-file-activation

我在 app.cs 文件中实现了OnFileActivated 覆盖方法。我在清单中设置了文件类型关联。一切正常。我能够毫无问题地处理文件并将内容写入其中。上述问题除外。

【问题讨论】:

  • 非常不寻常,这里的官方回答会有所帮助。我想可能是您无权访问文件夹本身,但它仍然无法解释删除
  • 是的,我也觉得这很不寻常,你能分享更多OnFileActivated的方法吗?我不知道你是如何得到文件的。
  • 我已包含更多信息

标签: uwp


【解决方案1】:

我猜原因可能是你只有文件本身的权限,所以删除它是可以的,但你没有文件位置的权限,例如documentation 说:

您不应尝试访问该文件的路径,因为您的应用可能无权访问该文件的位置。

如果您知道经典的System.IO API,您可能还记得没有Rename 方法。要重命名,您实际上需要调用Move method,但这显然需要对文件夹本身具有权限。因此,我认为RenameAsync 使用了类似的方法,因此不允许您执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2020-06-03
    • 2020-10-02
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多