【问题标题】:Configured SD card path in emulator is null - Windows Phone 8.1 (runtime)模拟器中配置的 SD 卡路径为空 - Windows Phone 8.1(运行时)
【发布时间】:2015-07-27 21:22:59
【问题描述】:

我对 WP 8.1(运行时)SD 卡访问感到非常困惑。我正在尝试在 WP 8.1(运行时)SD 卡中创建一个文件夹,但无法这样做。我正在关注MSDN 教程以在 WinRT 中访问 sd 卡。我需要访问 SD 卡才能存储我的应用程序的备份和日志文件夹。通过遵循this 教程,我在模拟器中配置了 sd 卡路径,并使用以下代码访问该路径。

 private async Task<string> AsyncExternalStoragePath()
 {
   // Get the logical root folder for all external storage devices.
   Windows.Storage.StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;

   // Get the first child folder, which represents the SD card.
   StorageFolder sdCard = (await externalDevices.GetFoldersAsync().AsTask().ConfigureAwait(false)).FirstOrDefault();


 }

externalDevices.Path 返回空字符串,而不是返回我配置的路径。我在Capabilities 下启用了RemovableStorage 并添加了FileTypeAssociations。但老实说,这个FileTypeAssociations 让我非常困惑。我看了很多文章,但我还没有完全弄清楚。

基本上我想要两个文件夹和一个文件在我的应用名称文件夹下。

AppnameFolder -> BackupFolder, LogFolder, Infile

每个文件夹下

Backup -> To keep last five backup files (.db)
Log -> To create log files per day basis (.txt)
inifile -> To enable logging

如果我知道如何在 sd 卡中创建自定义文件夹(应用名称文件夹),我会轻松创建子文件夹(备份、日志)。但是现在我被困在获取根路径上。

编辑:按照评论中的建议,通过在异步调用中添加ConfigureAwait(false) 解决了死锁问题,但 sdcard 路径仍然为空,如何获取路径并在那里创建文件夹?

【问题讨论】:

标签: c# windows-runtime windows-phone-8.1 removable-storage


【解决方案1】:

使用“externalDevices”,您可以查询手机中的所有存储设备。 然后试图找到它的路径。

您应该找到 sdcard 的 根文件夹 的路径,而不是 sdcard 本身的路径。

“sdCard.path” 会起作用。

在 Subha 的评论后编辑
假设 Removable Storage 在 appxmanifest 中声明,并且模拟器插入了模拟的 sdcard(如教程所述;Storage Sense 是否给出了弹出窗口?)以下应该可以工作。
请注意,我没有使用任务。

StorageFolder sdcard;

public async void read_sdcard_button_click(object sender, RoutedEventArgs e)
{
    sdcard = (await KnownFolders.RemovableDevices.GetFoldersAsync()).FirstOrDefault();
}

private void some_other_method()
{
    textbox.Text = sdcard.path;
}

【讨论】:

  • 我在模拟器中配置了sd卡路径,但是返回sdCard为null,请问如何获取sdcard的根目录?
  • 编辑了我的答案。你能检查/试试这个吗?
  • 我的代码和你的一样,不是直接访问 RemovableDevices.GetFolderAsync(),而是使用 externalDevices 变量,对吗?我添加了 ConfigureAwait 来修复死锁。
  • 使用 externalDevices 应该不是问题。 (如果不是真的需要,我个人不会使用额外的变量。)我们代码的唯一区别是“作为任务位运行”。不过应该没问题。
  • 刚刚做了一些测试。将模拟器恢复为默认检查点(因此没有 sdcard),启动了我的应用程序,它对 sdcard 提供了空引用(如您在帖子中所述)。插入 sdcard(StorageSense 应用弹出“new sdcard found”)并再次运行我的应用。现在sdcard找到了,可以查询文件夹和文件了。仔细检查 StorageSense 是否真的可以检测到 sdcard。这看起来像是模拟器中的 sdcard 的问题,而不是您的应用程序中的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多