为啥我无法从我的 Xamarin.Forms UWP 应用程序访问 DownloadsFolder,并获得 System.UnauthorizedAccessException?

Posted

技术标签:

【中文标题】为啥我无法从我的 Xamarin.Forms UWP 应用程序访问 DownloadsFolder,并获得 System.UnauthorizedAccessException?【英文标题】:Why can’t I access the DownloadsFolder from my Xamarin.Forms UWP application, getting a System.UnauthorizedAccessException?为什么我无法从我的 Xamarin.Forms UWP 应用程序访问 DownloadsFolder,并获得 System.UnauthorizedAccessException? 【发布时间】:2021-05-23 15:02:43 【问题描述】:

我的 Xamarin.Forms UWP 应用程序需要将文件保存在用户的设备上。 docs 表示 UWP 应用程序可以访问在通常的“下载”文件夹中创建的相应文件夹。但是,当我尝试使用 DownloadsFolder 类在那里保存文件时,出现以下异常:

Access to the path 'C:\Users\tikoz\Downloads\38b8dad0-9c00-4b76-8f23-59192c50b740_enn3pya30cxd2!App\tff20210219204840.jpg' is denied.

我用来下载文件的代码如下:

try 
   var checkAlreadyExistingFile = await Windows.Storage.DownloadsFolder.CreateFileAsync(fileName, CreationCollisionOption.FailIfExists);

   var share = new ShareClient(StorageAccountConnectionString, FileShareName);
   var directory = share.GetDirectoryClient(string.Empty);
   var file = directory.GetFileClient(fileName);

   ShareFileDownloadInfo download = await file.DownloadAsync();
   using (var stream = File.OpenWrite(checkAlreadyExistingFile.Path))  // Raises the exception
      await download.Content.CopyToAsync(stream);
      DownloadedReceiptImagePath = stream.Name;
      return DownloadedReceiptImagePath;
   

catch (Exception e) 
   Console.WriteLine(e);
   return null;

我想下载保存在 Azure 文件共享中的文件。 catch 子句捕获上述由File.OpenWrite(checkAlreadyExistingFile.Path 指令引发的异常。我误解了文档,还是遗漏了什么?

【问题讨论】:

我认为您必须在 Package.appxmanifest 文件中包含一些内容才能访问下载文件夹 @ShubhamTyagi 我在有关DownloadsFolder 的文档中没有找到与该文件相关的任何内容。 ***.com/questions/33082835/… 【参考方案1】:

我想下载保存在 Azure 文件共享中的文件。 catch 子句捕获上述由 File.OpenWrite(checkAlreadyExistingFile.Path 指令引发的异常。

请在此处查看DownloadsFolder document。在下载文件夹中创建或访问文件不需要功能。但是你需要使用Windows Storage Api 而不是System.IO(OpenWrite)。您可以通过以下方式写作。

var checkAlreadyExistingFile = await Windows.Storage.DownloadsFolder.CreateFileAsync("Test", CreationCollisionOption.FailIfExists);

using (var stream = await checkAlreadyExistingFile.OpenStreamForWriteAsync())
 
    // process stream here.

【讨论】:

以上是关于为啥我无法从我的 Xamarin.Forms UWP 应用程序访问 DownloadsFolder,并获得 System.UnauthorizedAccessException?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Xamarin.Forms 控件在 StackLayout 中重叠?

为啥活动指示器在 Xamarin.forms 中不起作用?

为啥在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题?

为啥使用 Xamarin Forms 的 iOS 应用程序不显示 Font Awesome?

Xamarin.Forms App 将数据返回给调用 App

在 Xamarin Forms 中绑定之前修改数据