如何从本地文件夹uwp显示图像

问题描述 投票:4回答:2

我正在尝试自动(无需用户交互)可视化在UWP应用程序中保存在C:\Myfolder\image.jpg中的图像。我知道这是一个热门话题,UWP应用程序只能访问文件系统的某些“部分”,但我也读到有不同的解决方案可以解决这个问题,如this

试试这个:mainpage.cs

BitmapImage bitmap = new BitmapImage();
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\MyFolder");
StorageFile file = await folder.GetFileAsync("image.jpg");
using (var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
     bitmap.SetSource(stream);
     image0.Source = bitmap;
}

在appxmanifest中添加这些行:

<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="App">
<Extensions>
    <uap:Extension Category="windows.fileTypeAssociation">
      <uap:FileTypeAssociation Name="jpegfiles">
        <uap:SupportedFileTypes>
          <uap:FileType>.jpg</uap:FileType>
        </uap:SupportedFileTypes>
      </uap:FileTypeAssociation>
    </uap:Extension>
  </Extensions>
  </Application>
 </Applications>
 <Capabilities>
   <Capability Name="internetClient" />
   <Capability Name="privateNetworkClientServer" />
   <Capability Name="internetClientServer" />
   <uap:Capability Name="enterpriseAuthentication" />
   <uap4:Capability Name="userDataTasks" />
   <DeviceCapability Name="microphone" />
 </Capabilities>

不幸的是,我总是得到一个错误:System.UnauthorizedAccessException: 'Access is denied.

我还尝试在Image对象中编写图像的直接路径,如:

 image0.Source = new BitmapImage(new Uri(@"C:\Myfolder\image.jpg"));

在这种情况下,应用程序启动但它没有显示任何内容。

也许我错过了一些东西,或者我不明白如何设置文件访问权限。

c# uwp
2个回答
5
投票

实际上有一些方法可以在UWP中的磁盘上的任何位置访问本地文件。您可以声明受限制的broadFileSystemAccess功能(请参阅docs),这将允许您使用StorageFile API访问磁盘上的任何路径(请注意,您仍然无法使用经典的System.IO API访问这些路径)。如果启用broadFileSystemAccess,您的代码将按原样开始工作。

但是,要声明此功能,您的应用需要有充分的理由,因为它是对用户设备的潜在安全威胁。 Docs州:

这是一种受限制的能力。可在“设置”>“隐私”>“文件系统”中配置访问。由于用户可以随时在“设置”中授予或拒绝权限,因此应确保您的应用能够适应这些更改。如果您发现您的应用程序无权访问,您可以选择通过提供指向Windows 10文件系统访问和隐私文章的链接来提示用户更改设置。请注意,用户必须关闭应用,切换设置,然后重新启动应用。如果他们在应用程序运行时切换设置,平台将暂停您的应用程序,以便您可以保存状态,然后强制终止应用程序以应用新设置。在2018年4月更新中,权限的默认值为“开”。在2018年10月更新中,默认为关闭。

如果您向声明此功能的商店提交应用程序,则需要提供有关您的应用程序需要此功能的原因以及打算如何使用它的其他说明。此功能适用于Windows.Storage命名空间中的API。有关如何在应用中启用此功能的示例,请参阅本文末尾的“示例”部分。

但是有一些地方,如ApplicationData.Current.LocalFolderApplicationData.Current.RoamingFolder,您无需其他权限即可访问。您还可以声明musicLibrary等功能来访问库。

最后,您还可以让用户使用FileOpenPickerFileSavePicker等类的对话框手动选择文件,然后使用StorageApplicationPermissions.FutureAccessList保留对此文件的授权访问权限 - 阅读有关此here的更多信息。

有关详细信息,请参阅docs


1
投票

您无法直接访问UWP中的文件。真正的问题是您使用的路径受到保护。您需要使用UWP为您的应用访问的文件夹。

您可以在以下位置获得更多信息:

https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files

您将需要执行以下操作:

Windows.Storage.StorageFolder storageFolder =
    Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFile sampleFile =
    await storageFolder.GetFileAsync("your.bmp");

然后,您可以开始使用该文件。

以下链接还显示了如何枚举Pictures文件夹中的文件:https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-listing-files-and-folders

© www.soinside.com 2019 - 2024. All rights reserved.