通过单击应用程序中的按钮访问 UWP windows phone 模拟器上的 SD 卡

Access sd card on a UWP windows phone emulator by clicking a button in an app

我正在制作一个 Windows phone 应用程序,我希望能够在我的应用程序上添加一个按钮,允许我访问虚拟 SD 卡模拟器,并能够选择一个 txt 文件并在应用程序中读取它。 我对这一切也很陌生。

非常感谢

抢.

Access sd card on a UWP windows phone emulator by clicking a button in an app

首先,通过配置模拟器附加工具的 SD 卡选项卡确保您有 "Insert the SD card"。这样模拟器的SD卡文件夹就可以使用了。具体如何配置请参考SD card parts of this document.

其次,在您的应用程序可以存储和访问 SD 卡上的文件之前,在应用程序清单文件中指定 removableStorage 功能。通常你还必须注册以处理你的应用程序存储的文件类型和 accesses.For 例如,你需要访问 SD 卡存储中的 txt 文件,配置应用程序清单如下:

<Applications>
...
    <Extensions>  
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="camera_assoication">
            <uap:SupportedFileTypes>
              <uap:FileType>.bmp</uap:FileType>
              <uap:FileType>.txt</uap:FileType>
              <uap:FileType>.gif</uap:FileType>       
            </uap:SupportedFileTypes>
          </uap:FileTypeAssociation>
        </uap:Extension>
    </Extensions>
  </Application>
</Applications>
<Capabilities>
  <Capability Name="internetClient" />
  <uap:Capability Name="removableStorage" />
</Capabilities>

有关功能的更多详细信息,请参考 App capability declarations

最后,现在您可以按照 this document 上的示例来编写您的逻辑了。比如要读取SD卡中的一个txt文件,可以使用如下代码:

XAML

<TextBlock x:Name="txtreadresult"></TextBlock>
<Button x:Name="btnreadsd" Click="btnreadsd_Click" Content="read file from SD"></Button>

代码隐藏

private async void btnreadsd_Click(object sender, RoutedEventArgs e)
{
   StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
   // Get the first child folder, which represents the SD card.
   StorageFolder sdCard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();

   if (sdCard != null)
   {
       // An SD card is present and the sdCard variable now contains a reference to it.
       StorageFile txtfile = await sdCard.GetFileAsync("text.txt");          
       string testtext = await FileIO.ReadTextAsync(txtfile);
       txtreadresult.Text = testtext;
   }
   else
   {
       // No SD card is present.
   }
}