Windows phone 8 學習筆記(2) 資料檔案操作

來源:互聯網
上載者:User

標籤:blog   http   使用   os   strong   io   檔案   資料   

Windows phone 8 應用用於資料檔案儲存訪問的位置僅僅限於安裝資料夾、本地檔案夾(隔離儲存區 (Isolated Storage)空間)、媒體庫和SD卡四個地方。本節主要講解它們的用法以及相關限制性。另外包括本機資料庫的使用方式。

快速導航:
一、分析各類資料檔案儲存方式
二、安裝資料夾
三、本地檔案夾(隔離儲存區 (Isolated Storage)空間)
四、媒體庫操作
五、本機資料庫 一、分析各類資料檔案儲存方式 1)安裝資料夾

安裝資料夾即應用安裝以後的磁碟根資料夾,它提供唯讀存取權限。它在手機中對應的路徑為“ C:\Data\Programs\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\Install\”。
    一般在這個位置可以拿到如下資訊:
資源檔AppResources.resx  資源檔一般用於定義字串,國際化資源等,也可以編譯存放圖片
被編譯的資源檔 
安裝目錄的其他檔案
    特點:唯讀,可以訪問與應用程式相關的資源與檔案。 2)本地檔案夾(WP7:隔離儲存區 (Isolated Storage)空間)

  Windows phone 8 為每個應用程式指派了一個本地檔案夾,一般情況下只能訪問自己的本地檔案夾,對自己的本地檔案夾具備完全的讀寫權限。它在手機中的路徑一般為:“C:\Data\Users\DefApps\AppData\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\Local”
    本地檔案夾主要功能:
自由讀寫隱藏檔 
存放本機資料庫 
存取索引值對
    特點:讀寫操作不限制,主要用於處理應用相關的檔案。 3)媒體庫

   媒體庫是唯一一個共用訪問地區,可以訪問圖片、視頻、音樂等。圖片庫的地址為:“C:\Data\Users\Public\Pictures\”
    媒體庫主要功能:
提供共用式的媒體檔案訪問,部分讀寫權限 
    特點:可讀取,寫入權限部分限制,共用性強。 4)SD卡

SD卡與後面的章節關聯,你可以訪問《Windows phone 8 學習筆記 應用的啟動 檔案關聯以及SD卡訪問》 提前瞭解,如果串連未生效請耐心等待發布^_^。 二、安裝資料夾 1)讀取資源檔資源檔AppResources.resx的內容

建立WP8項目,添加建立項,資源檔,“Resource1.resx”。添加字串資源,名稱為“String1”值為“Test”。

切換到圖片資源,添加圖片“ResourceImg.png”

然後,我們訪問這些資源,代碼如下:

[XAML]

        <!--ContentPanel - 在此處放置其他內容-->        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            <StackPanel x:Name="stackPanel" Grid.Row="1">            </StackPanel>        </Grid>

[C#]

            //擷取字元資源            string myString1 = Resource1.String1;            //擷取圖片資源            var myResourceImg = Resource1.ResourceImg;            Image image = new Image();            BitmapImage bitmapImage = new BitmapImage();            bitmapImage.SetSource(new MemoryStream(myResourceImg));            image.Source = bitmapImage;            stackPanel.Children.Add(image);
2)讀取被編譯的資源檔

首先,我們設定圖片為資源模式,一般的項目中的圖片檔案的產生操作設定為“內容”,這裡設定為“Resource”。添加一張圖片到Image/2.png,右鍵屬性,設定產生操作為“Resource”。這個時候我們不能通過直接路徑的方式訪問圖片,我們分別看看在XAML中和代碼中如何擷取圖片。

[XAML]

<Image Source="/PhoneApp1;component/Image/2.png"></Image>

[C#]

Uri uri = new Uri("/PhoneApp1;component/Image/2.png", UriKind.Relative);//查看安裝資料夾中的資源檔StreamResourceInfo streamResourceInfo = Application.GetResourceStream(uri);BitmapImage bitmapImage = new BitmapImage();bitmapImage.SetSource(streamResourceInfo.Stream);Image image = new Image();image.Source = bitmapImage;
3)訪問安裝資料夾

我們通過代碼擷取安裝目錄下的所有檔案和檔案夾。

[C#]

//擷取安裝資料夾StorageFolder installedLocation = Package.Current.InstalledLocation;//擷取安裝資料夾下的子檔案夾集合var folders = await installedLocation.GetFoldersAsync();var folderNames = folders.Select(x => x.Name).ToArray();//擷取安裝資料夾下的檔案集合var files = await installedLocation.GetFilesAsync();var fileNames = files.Select(x => x.Path).ToArray();

另外,我們還可以通過路徑的方式訪問安裝資料夾,如下操作將訪問圖片檔案,並展示到圖片控制項。

[C#]

Image image = new Image();StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///1.jpg"));var c = await storageFile.OpenReadAsync();BitmapImage bitmapImage = new BitmapImage();bitmapImage.SetSource(c.AsStream());image.Source = bitmapImage;this.stackPanel.Children.Add(image);
三、本地檔案夾(隔離儲存區 (Isolated Storage)空間)1)在本地檔案夾中操作檔案     WP7:
[C#]
 //WP7中存取隔離儲存區 (Isolated Storage)空間(本地檔案夾)的方法 using (IsolatedStorageFile storageFile = IsolatedStorageFile.GetUserStoreForApplication()) {     //擷取本地檔案夾下所有的檔案名稱集合     var fileNames = storageFile.GetFileNames();     //操作檔案     var storageFileStrem = storageFile.OpenFile("test.txt", FileMode.OpenOrCreate); }

    WP8:
[C#]

//WP8中存取本地檔案夾(隔離儲存區 (Isolated Storage)空間)的方法//擷取本地檔案夾var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;//操作檔案var file = await localFolder.GetFileAsync("test.txt");var fileRandomAccessStream = await file.OpenAsync(FileAccessMode.Read);var fileStream = fileRandomAccessStream.AsStream();var path = localFolder.Path;
2)存取索引值對

ApplicationSettings用於儲存當應用程式退出後需要儲存的輕量級資料。下面是使用方法:

[C#]

//儲存索引值對IsolatedStorageSettings.ApplicationSettings.Add("Key1", "value1");IsolatedStorageSettings.ApplicationSettings.Save();//擷取之前儲存的索引值對MessageBox.Show(IsolatedStorageSettings.ApplicationSettings["Key1"].ToString());
3)安裝資料夾、本地檔案夾的路徑訪問方式

對於使用路徑訪問的檔案操作,URL首碼根據位置、API不同都有所不同。相關的URL首碼整理如下:

Windows 命名空間
其他API

安裝資料夾
ms-appx:///
appdata:/

本地檔案夾
ms-appdata:///
isostore:/四、媒體庫操作

列舉下媒體庫的基本操作,以及照片讀寫操作API:

[C#]

MediaLibrary mediaLibrary = new MediaLibrary();string path = string.Empty;if (mediaLibrary.Pictures.Count > 0)    //取得媒體圖片庫的絕對路徑    path = Microsoft.Xna.Framework.Media.PhoneExtensions.MediaLibraryExtensions.GetPath(mediaLibrary.Pictures[0]);//擷取媒體庫全部照片var Pictures = mediaLibrary.Pictures;//把圖片庫第一張圖片的縮圖存到已儲存的圖片檔案夾mediaLibrary.SavePicture("myImg.jpg", Pictures[0].GetThumbnail());//擷取照片庫跟目錄下包含照片的檔案夾集合var ImgFolerNames = mediaLibrary.RootPictureAlbum.Albums.Select(x => x.Name).ToArray();
五、本機資料庫

在Windows phone 8 提供了類似sqlserver的方式管理資料,這就是本機資料庫,本機資料庫是檔案形式儲存的,一般可以存放在兩個位置,安裝資料夾和本地檔案夾。由於安裝資料夾唯讀,所以如果不需要操縱資料,則可以放在這個位置,如果需要對資料進行存取,我們可以放到本地檔案夾。本文樣本將建立一個資料庫,包含一張學生表,並且支援對學生表進行增刪改查操作。

首先,我們需要建立一個DataContext:

[C#]

    public class MyDataContext : DataContext    {        //定義連接字串        public static string DBConnectionString = "Data Source=isostore:/MyDb.sdf";        public MyDataContext()            : base(DBConnectionString)        { }        /// <summary>        /// 學生表        /// </summary>        public Table<Student> Students;    }

建立學生資料表:

[C#]

    [Table]    public class Student : INotifyPropertyChanged, INotifyPropertyChanging    {        // 定義ID,主鍵欄位,必備        private int _id;        /// <summary>        /// 編號        /// </summary>        [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]        public int Id        {            get            {                return _id;            }            set            {                if (_id != value)                {                    NotifyPropertyChanging("Id");                    _id = value;                    NotifyPropertyChanged("Id");                }            }        }        private string _name;        /// <summary>        /// 學生姓名        /// </summary>        [Column]        public string Name        {            get            {                return _name;            }            set            {                if (_name != value)                {                    NotifyPropertyChanging("Name");                    _name = value;                    NotifyPropertyChanged("Name");                }            }        }        private int _age;        /// <summary>        /// 年齡        /// </summary>        [Column]        public int Age        {            get            {                return _age;            }            set            {                if (_age != value)                {                    NotifyPropertyChanging("Age");                    _age = value;                    NotifyPropertyChanged("Age");                }            }        }        #region INotifyPropertyChanged Members        public event PropertyChangedEventHandler PropertyChanged;        // Used to notify the page that a data context property changed        private void NotifyPropertyChanged(string propertyName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));            }        }        #endregion        #region INotifyPropertyChanging Members        public event PropertyChangingEventHandler PropertyChanging;        // Used to notify the data context that a data context property is about to change        private void NotifyPropertyChanging(string propertyName)        {            if (PropertyChanging != null)            {                PropertyChanging(this, new PropertyChangingEventArgs(propertyName));            }        }        #endregion    }

這裡是對學生表進行操作的邏輯:

[XAML]

<ListBox x:Name="listbox1">    <ListBox.ItemTemplate>        <DataTemplate>            <TextBlock Text="{Binding Name}"/>        </DataTemplate>    </ListBox.ItemTemplate></ListBox>

[C#]

 private void Add() {     MyDataContext db = new MyDataContext();     //建立資料庫     if (!db.DatabaseExists())         db.CreateDatabase();     //新增學生     Student student1 = new Student     {         Id = 1,         Name = "張三",         Age = 15     };     db.Students.InsertOnSubmit(student1);     List<Student> students = new List<Student>();     students.Add(new Student { Id = 2, Name = "李四", Age = 16 });     students.Add(new Student { Id = 3, Name = "王五", Age = 17 });     db.Students.InsertAllOnSubmit(students);     db.SubmitChanges(); } private void Show() {      MyDataContext db = new MyDataContext();     //顯示年齡大於15歲的學生      listbox1.ItemsSource = db.Students.Where(x => x.Age > 15); } private void Delete() {     MyDataContext db = new MyDataContext();     //刪除姓名為李四的學生     var query = db.Students.Where(x => x.Name == "李四");     db.Students.DeleteAllOnSubmit(query);     db.SubmitChanges(); } private void Update() {     MyDataContext db = new MyDataContext();     //將所有的學生年齡加一歲     foreach (var student in db.Students)     {         student.Age++;     }     db.SubmitChanges(); }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.