Windows Phone 8 手機儲存卡資料

來源:互聯網
上載者:User
文章目錄
  • 16.1.1擷取儲存卡檔案夾
  • 16.1.2擷取儲存卡檔案
  • 16.1.3執行個體:讀取儲存卡資訊

《深入淺出Windows Phone 8應用開發》之手機儲存卡資料

    手機儲存卡為SD卡(全名為Secure Digital Memory Card),使用者擴充手機的資訊儲存,可以很方便地進行更換和安裝。在Windows Phone 8裡面第三方程式只有對儲存卡的讀取許可權,包括讀取儲存卡的檔案目錄和檔案的資訊。讀取儲存卡資訊的相API都在Microsoft.Phone.Storage空間下,讀取儲存卡的資訊需要在項目的WMAppManifest.xml檔案中添加ID_CAP_REMOVABLE_STORAGE的能力,表示程式需要讀取儲存卡的資訊,否則調用讀取儲存卡的API將會引發異常。

16.1.1擷取儲存卡檔案夾

    要讀取儲存卡檔案夾首先需要去識別儲存卡裝置,識別儲存卡裝置可以通過ExternalStorage.GetExternalStorageDevicesAsync()方法非同步去擷取一個儲存卡裝置的列表,儲存卡裝置對象用ExternalStorageDevice類表示。ExternalStorageDevice類包含兩個屬性,一個是ExternalStorageID表示擴充儲存的唯一ID字串,另外一個是RootFolder表示儲存卡的根目錄,是預設的最頂層的檔案夾。ExternalStorageDevice類還包含兩個非同步方法呼叫,一個是GetFileAsync方法通過檔案的路徑來擷取檔案的資訊,一個是GetFolderAsync方法通過檔案夾的路徑來擷取檔案夾的資訊。

    ExternalStorageFolder類表示一個儲存卡的檔案夾類,裡麵包含了檔案夾的一些詳細的資訊,以及檔案夾的相關方法,ExternalStorageFolder類的成員如表16.1所示。

                    表16.1 ExternalStorageFolder類的成員

名稱

說明

DateModified

檔案修改的時間

Name

檔案夾的名字

Path

檔案夾的路徑

GetFilesAsync()

擷取該檔案夾的所有檔案

GetFolderAsync(string name)

擷取該檔案夾目錄下該名字檔案夾的資訊

GetFoldersAsync()

擷取該檔案夾下面所有的檔案夾

    下面開看一下擷取儲存卡檔案目錄的程式碼範例:

    async void GetFolder()    {        // 擷取擴充的儲存卡列表        IEnumerable<ExternalStorageDevice>  deviceList = await ExternalStorage.GetExternalStorageDevicesAsync();        // 遍曆儲存卡列表        foreach (ExternalStorageDevice device in deviceList)        {            // 遍曆儲存卡根目錄            foreach (ExternalStorageFolder folder in await device.RootFolder.GetFoldersAsync())            {   // 遍曆儲存卡裡面的檔案夾                foreach (ExternalStorageFolder folder2 in await folder.GetFoldersAsync())                {                    // 擷取檔案夾的資訊 如名字folder2.Name等                }            }        }    }

 

16.1.2擷取儲存卡檔案

    ExternalStorageFile類表示一個儲存卡的檔案類,裡麵包含了檔案的一些詳細的資訊,以及開啟檔案的方法,ExternalStorageFile類的成員如表16.2所示。要讀取儲存卡的檔案,必須要先讀取出檔案夾之後,然後再通過ExternalStorageFolder類的GetFilesAsync()的方法來擷取該檔案夾下的所有檔案,如果知道檔案的儲存路徑也可以使用ExternalStorageDevice儲存卡設別類的GetFileAsync(string filePath)方法來擷取具體路徑的檔案。

                        表16.2 ExternalStorageFile類的成員

名稱

說明

DateModified

檔案修改的時間

Name

檔案夾的名字

Path

檔案夾的路徑

Task<IO.Stream> OpenForReadAsync()

開啟檔案夾的方法

    下面開看一下擷取儲存卡根目錄檔案的程式碼範例:

    async void GetFile()    {        // 擷取擴充的儲存卡列表        IEnumerable<ExternalStorageDevice> deviceList = await ExternalStorage.GetExternalStorageDevicesAsync();        // 遍曆儲存卡列表        foreach (ExternalStorageDevice device in deviceList)        {    // 遍曆儲存卡根目錄的檔案            foreach (ExternalStorageFile file in await device.RootFolder.GetFilesAsync())            {                // 處理檔案的資訊            }        }    }
16.1.3執行個體:讀取儲存卡資訊

下面給出讀取儲存卡資訊的樣本:在手機應用程式裡面讀取手機的儲存卡的資訊,按照檔案夾目錄一層層來展示儲存卡的檔案。
代碼清單16-1:讀取儲存卡資訊(原始碼:第16章\Examples_16_1)

MainPage.xaml檔案主要代碼

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            <StackPanel>                <Button Content="擷取SD卡的檔案資訊" x:Name="btGetFile" Margin="0,0,0,80" Click="btGetFile_Click"/>                <TextBlock Text="資料夾清單:"/>                <ListBox x:Name="lbFolder"></ListBox>                <Button Content="開啟選中的檔案夾" Click="Button_Click_1" />                <TextBlock Text="檔案清單:" Margin="0,50,0,0"/>                <ListBox x:Name="lbFile"></ListBox>            </StackPanel>        </Grid> 

MainPage.xaml.cs檔案代碼

using System.Collections.Generic;using System.Windows;using System.Windows.Controls;using Microsoft.Phone.Controls;using Microsoft.Phone.Storage;namespace SDCardDemo{    public partial class MainPage : PhoneApplicationPage    {        IEnumerable<ExternalStorageDevice> deviceList;// 儲存卡裝置列表        public MainPage()        {            InitializeComponent();        }        // 開啟儲存卡的根目錄        private async void btGetFile_Click(object sender, System.Windows.RoutedEventArgs e)        {            // 擷取儲存卡裝置列表            deviceList = await ExternalStorage.GetExternalStorageDevicesAsync();            lbFolder.Items.Clear();            foreach (ExternalStorageDevice device in deviceList)            {                // 把擷取到的裝置根目錄資訊添加到ListBox控制項裡面                ListBoxItem item = new ListBoxItem();                item.Content = "根目錄"+device.ExternalStorageID;                item.DataContext = device.RootFolder;                lbFolder.Items.Add(item);            }        }        // 開啟檔案夾擷取檔案夾裡面的檔案夾和檔案        private async void Button_Click_1(object sender, System.Windows.RoutedEventArgs e)        {            if (lbFolder.SelectedIndex == -1)            {                MessageBox.Show("請選擇一個檔案夾");            }            else            {                // 擷取選中的檔案夾                ListBoxItem item = lbFolder.SelectedItem as ListBoxItem;                ExternalStorageFolder externalStorageDevice = item.DataContext as ExternalStorageFolder;                // 擷取檔案夾中的檔案夾                IEnumerable<ExternalStorageFolder> folderList= await externalStorageDevice.GetFoldersAsync();                lbFolder.Items.Clear();                foreach (ExternalStorageFolder folder in folderList)                {                    // 把擷取到的檔案夾資訊添加到ListBox控制項裡面                    ListBoxItem item2 = new ListBoxItem();                    item2.Content = "檔案夾:" + folder.Name;                    item2.DataContext = folder;                    lbFolder.Items.Add(item2);                }                // 擷取檔案夾中的檔案                IEnumerable<ExternalStorageFile> fileList = await externalStorageDevice.GetFilesAsync();                lbFile.Items.Clear();                foreach (ExternalStorageFile file in fileList)                {                    // 把擷取到的檔案資訊添加到ListBox控制項裡面                    ListBoxItem item3 = new ListBoxItem();                    item3.Content = "檔案:" + file.Name;                    item3.DataContext = file;                    lbFile.Items.Add(item3);                }            }        }    }}

程式的運行效果16.1所示。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.