ườ Tr ọ ự ng ĐH Khoa H c T  Nhiên TP.HCM

TRUNG TÂM TIN H CỌ

ệ ớ

ư

L p trình Windows Phone Bài 6: Làm vi c v i file và cách l u tr  file

GV Biên so n: Tr n Duy Thanh

2014

Nội dung

• Làm việc với file và thư mục trên Windows

Phone 8

• Serialization and deserialization

• IsolatedStorageSettings

2

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1. Làm việc với file và thư mục

• Đặc điểm lưu trữ file trên Windows Phone

• Làm việc với folder

• Làm việc với file

• Thư mục cài đặt

• Windows Phone Power Tools

3

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.1 Đặc điểm lưu trữ file trên Windows Phone v Có thể tạo file hoặc thư mục như các hệ thống

khác

v Hoạt động dựa trên khái niệm Isolated storage

v Có 2 cách để làm việc với file và folder:

ü Sử dụng IsolatedStorage API trên Windows Phone

7.x

ü Sử dụng Windows.Storage API trên Windows

Runtime

=> Chỉ tập trung vào Windows.Storage API

4

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.2 Làm việc với folder

v Sử dụng lớp StorageFolder.

v Một đối tượng StorageFolder đại diện cho 1 thư

mục trong bộ nhớ máy.

v Để truy xuất đến thư mục gốc của ứng dụng, ta dùng lớp ApplicationData.Current.LocalFolder trong namespace Windows.Storage

StorageFolder folder = ApplicationData.Current.LocalFold er;

5

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.2 Làm việc với folder

v Các phương thức quan trọng của lớp

StorageFolder:

ü CreateFolderAsync(): tạo thư mục

ü GetFolderAsync(): lấy thư mục

ü GetFoldersAsync(): lấy danh sách thư mục

ü DeleteAsync(): xóa thư mục

ü RenameAsync(): đổi tên thư mục

6

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.2 Làm việc với folder

VD: Tạo thư mục tên “MyFolder” tại thư mục gốc

ApplicationData.Current.LocalFolder.CreateFolderAsy nc(“MyFolder");

VD: Lấy một thư mục “MyFolder” tại thư mục gốc

StorageFolder folder = await ApplicationData.Current.LocalFolder.GetFolderAsync( “MyFolder");

7

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

1.2 Làm việc với folder

v Lưu ý:

ü Các phương thức trong lớp StorageFolder thường là các phương thức xử lý bất đồng bộ nên ta phải thêm từ khóa await khi gọi các phương thức đó.

ü Kiểm tra sự tồn tại của thư mục trước khi truy xuất đến nó bằng cách dùng lệnh try...catch

8

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

1.2 Làm việc với folder

Ví dụ:

StorageFolder folder;

try

{

folder = await

ApplicationData.Current.LocalFolder.GetFolderAsync("myFolde r");

}

catch (FileNotFoundException exc)

{

folder = null;

}

9

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

1.3 Làm việc với file

v Để làm việc với file, ta sử dụng lớp StorageFile

v Một đối tượng StorageFile thì đại diện cho một

file trong bộ nhớ máy.

v Các phương thức quan trọng của lớp

StorageFile

ü DeleteAsync(): xóa file

ü RenameAsync(): đổi tên file

ü CopyAsync(): copy file

ü MoveAsync(): di chuyển file

10

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.3 Làm việc với file

v Để tạo cũng như truy xuất đến file, ta sử dụng 2

phương thức CreateFileAsync() và GetFileAsync() được cung cấp trong lớp StorageFolder

Ví dụ: Tạo file Test.txt ở thư mục gốc của ứng dụng

StorageFile file = await

ApplicationData.Current.LocalFolder.CreateFileAsy nc(“Test.txt“, CreationCollisionOption.OpenIfExists )

Truy xuất đến file Test.txt ở thư mục gốc

StorageFile file = await

11

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

ApplicationData.Current.LocalFolder.GetFileAsync(

“Test.txt“)

1.3 Làm việc với file

v Có thể sử dụng các tùy chọn khi tạo file để xử

lý khi file cần tạo đã tồn tại

ü CreationCollisionOption.ReplaceExisting

ü CreationCollisionOption.OpenIfExists

12

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

1.3 Làm việc với file

v Ghi dữ liệu vào file

//Tạo file cần ghi

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("file.txt", CreationCollisionOption.OpenIfExists ); //Dùng phương thức OpenAsync() để mở file dưới dạng Stream file //với chế độ Đọc-Ghi

IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite);

//Dùng DataWriter để ghi file

using (DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0)))

{

writer.WriteString("Sample text");

await writer.StoreAsync();

13

}

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.3 Làm việc với file

v Đọc dữ liệu vào file

//Lấy file cần đọc dữ liệu

StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("file.txt"); //Dùng phương thức OpenAsync() để mở file dưới dạng Stream file //với chế độ Đọc

IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.Read);

//Dùng DataReader để đọc file

using (DataReader reader = new DataReader(randomAccessStream.GetInputStreamAt(0))) {

uint bytesLoaded = await reader.LoadAsync((uint)

randomAccessStream.Size);

string readString = reader.ReadString(bytesLoaded);

14

MessageBox.Show(readString); ệ ớ

}

ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.4 Thư mục cài đặt

v Khi cần chép vào ứng dụng một số file có sẵn,

cần thiết cho lúc khởi chạy ứng dụng

v Để truy xuất đến thư mục cài đặt ứng dụng, nơi chứa tất cả các file có trong project của Visual Studio, ta truy xuất đến đối tượng

Package.Current.InstalledLocation, thuộc namespace Windows.ApplicationModel.

15

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

1.4 Thư mục cài đặt

Ví dụ: Để chép file Text.xml trong thư mục cài đặt vào thư mục gốc của ứng dụng

StorageFile file = await Package.Current.InstalledLocation.GetFileAsync("Text.xml"); await file.CopyAsync(ApplicationData.Current.LocalFolder);

16

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

1.5 Windows Phone Power Tools v Là công cụ giúp ta có thể debug trong khi làm

việc file và folder.

v Link download:

http://wptools.codeplex.com/

17

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

Nội dung

• Làm việc với file và thư mục trên Windows

Phone 8

• Serialization and deserialization

• IsolatedStorageSettings

18

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2. Serialization and deserialization • Đặt vấn đề

• Định nghĩa

• Cách sử dụng

19

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

2.1 Đặt vấn đề

v Các ứng dụng cần trao đổi dữ liệu trên internet

v Mỗi ứng dụng lưu trữ nhiều kiểu dữ liệu khác

nhau

v Cần một cách đơn giản nhất để lưu trữ dữ liệu

của ứng dụng

20

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2.2 Định nghĩa

v Serialization là quá trình chuyển đổi những

đối tượng phức tạp sang dạng text để có thể lưu trữ được bằng file. Định dạng file XML hay JSON là phổ biến nhất.

v Deserialization là quá trình ngược lại, chuyển đổi text thành các đối tượng để có thể sử dụng trong ứng dụng.

21

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2.2 Định nghĩa

v Cấu trúc file XML và JSON

public class Person

{

public string Name { get; set; }

public string Surname { get; set; }

public int Age { get; set; }

{"Age":33,"Name":"Long","Surname":"Nguyen"}

} Long Nguyen 33

JSON file

XML file

22

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

2.3 Cách sử dụng

Giả sử ta có class NhanVien như sau:

public class NhanVien

{

public string Ho { get; set; }

public string Ten { get; set; }

}

23

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2.3 Cách sử dụng

Và danh sách NhanVien

List DsNhanVien = new List {

new NhanVien { Ho = “Tran", Ten = “Long" },

new NhanVien { Ho = “Nguyen", Ten = “Phuc" }

};

v Đoạn code sau mô tả xử lý nút nhấn

btnSerialize. Khi nhấn nút, chương trình sẽ chuyển danh sách nhân viên thành text plain bằng cách serialize và định dạng output là xml sau đó ghi vào file nhanvien.xml

24

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2.3 Cách sử dụng

Private async void btnSerialize_Click(object sender, RoutedEventArgs e){

//Khai báo đối tượng kiểu DataContractSerializer để serialize danh sách nhân viên

DataContractSerializer serializer = new

DataContractSerializer(typeof(List));

//Tạo file xml để lưu text plain sau khi serialize

StorageFile file = await

ApplicationData.Current.LocalFolder.CreateFileAsync("nhanvien.xml");

//Mở file xml vừa tạo để chuẩn bị ghi dữ liệu

IRandomAccessStream randomAccessStream = await

file.OpenAsync(FileAccessMode.ReadWrite);

//Sử dụng serialize để chuyển từ đối tượng sang text plain

25

using (Stream stream = randomAccessStream.AsStreamForWrite()) {

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

serializer.WriteObject(stream, DsNhanVien);

await stream.FlushAsync();

}}

2.3 Cách sử dụng

v Kết quả file nhanvien.xml trong storage

xmlns="http://schemas.datacontract.org/2004/07/Demo_Serialization">

Tran

Long

Phuc

Nguyen

26

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

2.3 Cách sử dụng

v Đoạn code sau mô tả xử lý cho nút nhấn

btnDeserialize. Khi nhấn nút, chương trình sẽ thực hiện chuyển đổi dữ liệu text plain (được lấy từ file nhanvien.xml) thành đối tượng danh sách nhân viên

27

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

2.3 Cách sử dụng

private async void btnDeserialize_Click(object sender, RoutedEventArgs e) {

//Lấy file nhanvien.xml từ storage

StorageFile file = await

ApplicationData.Current.LocalFolder.GetFileAsync("nhanvien.xml");

//Khai báo đối tượng kiểu DataContractSerializer

DataContractSerializer serializer = new DataContractSerializer(typeof(List));

//Đọc file và ghi vào đối tượng kiểu IRandomAccessStream

IRandomAccessStream randomAccessStream = await

file.OpenAsync(FileAccessMode.Read);

//Sử dụng serialize để chuyển text plain thành đối tượng

using (Stream stream = randomAccessStream.AsStreamForRead()) {

List dsNhanVien = serializer.ReadObject(stream) as

28

List;

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file }

}

2.3 Cách sử dụng

v Lưu ý: ví dụ trên sử dụng ouput dạng xml, nếu ta muốn sử dụng dạng json, ta sử dụng lớp DataContractJsonSerializer thay cho lớp DataContractSerializer

29

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

Nội dung

• Làm việc với file và thư mục trên Windows

Phone 8

• Serialization and deserialization

• IsolatedStorageSettings

30

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

3. IsolatedStorageSettings

• Đặt vấn đề

• Giới thiệu IsolatedStorageSettings

• Các sử dụng

31

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

3.1 Đặt vấn đề

v Cần lưu trữ cấu hình của ứng dụng

v Cần lưu trữ các dữ liệu dạng Key-Value để truy

toàn ứng dụng

v Cần lưu trữ các dữ liệu tồn tại trong suốt ứng

dụng

32

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

3.2 Giới thiệu IsolatedStorageSettings v Lớp IsolatedStorageSettings cung cấp thuộc

tính ApplicationSettings.

v ApplicationSettings có dạng

Dictionary hay còn gọi là Key- Value.

v Bản chất của các settings được lưu trong file XML. API sẽ tự động serialize và deserialize.

33

ệ ớ ữ ư Bài 6: Làm vi c v i file và cách l u tr  file

3.3 Cách sử dụng

v Để lưu trữ một đối tượng vào settings

IsolatedStorageSettings settings =

IsolatedStorageSettings.ApplicationSettings;

settings.Add("name", “Windows Phone");

settings.Save();

v Để lấy giá trị từ settings

IsolatedStorageSettings settings =

IsolatedStorageSettings.ApplicationSettings;

if (settings.Contains("name"))

{

string Name = settings["name"].ToString();

34

}

v Lưu ý: Gọi phương thức Save() sau mỗi lần

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file

lưu.

Thảo luận

35

ệ ớ ư ữ Bài 6: Làm vi c v i file và cách l u tr  file