ườ 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"}
}
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
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">
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
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