none
WP8为什么GetFilesAsync和GetFileAsync都无法读取SD卡里的文件? RRS feed

  • 问题

  • async void GetFolder()
    {
        // 获取扩展的存储卡列表
        IEnumerable<ExternalStorageDevice> deviceList = await ExternalStorage.GetExternalStorageDevicesAsync();
        // 遍历存储卡列表
        foreach (ExternalStorageDevice device in deviceList)
        {
            // 遍历存储卡根目录
            foreach (ExternalStorageFolder folder in await device.RootFolder.GetFoldersAsync())
            {
                MessageBox.Show(folder.Name);
                // 遍历存储卡里面的文件夹
                foreach (ExternalStorageFolder folder2 in await folder.GetFoldersAsync())
                {
                    MessageBox.Show(folder2.Name);
    
                    // 获取文件夹的信息 如名字folder2.Name等
                }
    
                foreach (ExternalStorageFile file in await folder.GetFilesAsync())
                {
                    MessageBox.Show(file.Name);
                }
            }
    
            //foreach (ExternalStorageFile file in await device.RootFolder.GetFilesAsync())
            //{
            //    MessageBox.Show(file.Name);
            //}
        }
    }
    目录的话好像可以获取到,文件都无法读取到,这个是什么原因?
    2014年11月4日 2:46

答案

全部回复

  • 請問您外部的儲存裝置權限有打開嗎?

    2014年11月4日 6:07
  • 您好

    目錄可以抓到,所以基本上你已經有開啟功能 ID_CAP_REMOVABLE_STORAGE,但沒有辦法讀取檔案,這表示你沒有註冊 File Extensions,在微軟文章有相關描述,您必須了解那些是您可以訪問的內容,那些是不能訪問的內容

    在 Windows Phone 应用中访问 SD 卡(Windows Phone 应用商店应用)

    你可以访问的内容

    你的应用仅可以读取和写入以下类型的文件,该文件类型是应用已注册可在应用部件清单文件中处理的类型。

    你的应用还可以创建和管理文件夹。

    你无法访问的内容

    你的应用无法查看或访问系统文件夹及其包含的文件。

    你的应用无法查看使用“隐藏”属性标记的文件。“隐藏”属性通常用于减少意外删除数据的风险。

    你的应用无法通过使用 KnownFolders.DocumentsLibrary 查看或访问文档库。但是,你可以通过遍历文件系统在 SD 卡上访问文档库。

    回到您的問題,您必須去註冊 File Extensions,這部分微軟 MVP Pou 有寫了一篇文章 Windows Phone 8 - 操作External Storage API

    以下圖為例,我註冊了副檔名為 gpx。

    後續讀取出 gpx 的檔案


    歡迎參觀我的Blog【菜鳥自救會】

    2014年11月4日 8:41
  • 我也遇到了这个问题。

    尝试了你说的方法,发现了个更奇怪的现象。

    此种方法注册的文件类型几乎可以说是自定义类型的。常见类型(或者说系统所采用的)的类型如mp3、png、txt等却无法获取到。而且即便在配置文件中写入txt、png、mp3的关联依旧无法获取到文件。

    例如txt,若尝试把后缀名注册为txtabcd,则能正确识别。求解答!

    2015年3月3日 19:46