WP8開發系列3:WP7與WP8在檔案IO操作上的區別
一、Windows Phone 7的檔案操作:
如果在現有的wp7開發平臺上去寫入一個檔案,我們會想到使用: IsolatedStorageFile
程式碼如下:
private void WriteFile(string fileName, string content)
{
using (IsolatedStorageFile isolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isolatedStorageFileStream = isolatedStorageFile.CreateFile(fileName))
{
using (StreamWriter streamWriter = new StreamWriter(isolatedStorageFileStream))
{
streamWriter.Write(content);
}
}
}
}
讀取一個檔案:
private string ReadFile(string fileName)
{
string text;
using (IsolatedStorageFile isolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isolatedStorageFileStream = isolatedStorageFile.OpenFile(fileName, FileMode.Open))
{
using (StreamReader streamReader = new StreamReader(isolatedStorageFileStream))
{
text = streamReader.ReadToEnd();
}
}
}
return text;
}
然後,可以用IsoStoreSpy這類輔助工具進應用程式檢視儲存的檔案的內容等操作.
二、Windows Phone 8 檔案操作
wp8與win8的檔案操作方式類似,如果你在win8下寫過檔案操作,那麼WP8自然熟悉,這需要用到2個介面:IStorageFile和 IStorageFolder, 可以看出,一個是對檔案的操作,一個是對目錄的。這兩個介面均在 :Windwos.Storage元件中,
注意:因在windows 8 開發中大量使用了WinRT非同步程式設計方式,故在WP8中程式設計亦如此。
寫入檔案:
public async Task WriteFile(string fileName, string text)
{
IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
IStorageFile storageFile = await applicationFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (Stream stream = await storageFile.OpenStreamForWriteAsync())
{
byte[] content = Encoding.UTF8.GetBytes(text);
await stream.WriteAsync(content, 0, content.Length);
}
}
讀取檔案:
public async Task<string> ReadFile(string fileName)
{
string text;
IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
IStorageFile storageFile = await applicationFolder.GetFileAsync(fileName);
IRandomAccessStream accessStream = await storageFile.OpenReadAsync();
using (Stream stream = accessStream.AsStreamForRead((int)accessStream.Size))
{
byte[] content = new byte[stream.Length];
await stream.ReadAsync(content, 0, (int) stream.Length);
text = Encoding.UTF8.GetString(content, 0, content.Length);
}
return text;
}
OK,到此我們將操作檔案的方法寫好後,就可以在業務層進行呼叫了,方式如下:
await WriteFile("TestWP8IO.txt", "測試WP8與WP7檔案操作");
string text = await ReadFile("TestWP8IO.txt")
三、相容性問題
上面的程式碼分別對WP7與WP8平臺的檔案寫入與讀取操作進行了簡單的說明,你可能會想:“我在WP7應用中的檔案目錄結構定義,是不是在WP8中也是一樣的呢?”其實,兩者是有點區別的,這點區別,也是日後WP7向WP8遷移過程中必須要考慮的元素之一。
在WP7中,建立檔案userinfo.txt,那麼,它在隔離儲存區的檔案目錄結構如下:
C:\Data\Users\DefaultAppAccount\AppData\{ProductID}\Local\IsolatedStore\userinfo.txt
在WP8中,建立相同檔案,檔案儲存目錄結構如下:
C:\Data\Users\DefaultAppAccount\AppData\{ProductID}\Local\userinfo.txt
兩者一對比,我們很直觀的就能看到區別在哪裡,這就意味著:在WP8開發中,使用現有的WP7程式碼時,如果你不想改變原有檔案目錄結構,那你就必須要首先獲取WP7隔離儲存目錄.即:
IStorageFolder applicationFolder =await ApplicationData.Current.LocalFolder.GetFolderAsync("IsolatedStore");
最後,想說明的是:
如果你想“偷懶”或者說減少開發工作量,就看看我上面說的這些,但我建議各位開發者,最好是全新開發基於WP8平臺的應用,畢竟這意味著你也可以在Win8中快速部署。
相關文章
- Wp8開發環境搭建總結開發環境
- 標準IO與檔案IO 的區別
- Android與iOS/WP8跨平臺整合設計與開發_專欄AndroidiOS
- cocos2d-x 2.2 wp8 開發手記
- 阿里巴巴正招聘新的WP8/Win8淘寶開發阿里
- 檔案IO操作
- 開發與研發:區別很大(上)
- Java 檔案 IO 操作Java
- iOS檔案IO操作iOS
- NIO與IO區別
- Linux系統程式設計(2)——檔案與IO之系統呼叫與檔案IO操作Linux程式設計
- C# 基礎知識系列- 14 IO篇 檔案的操作C#
- Linux檔案IO操作Linux
- 檔案IO操作的最佳實踐
- 區塊鏈開發之Go語言—IO操作區塊鏈Go
- C#Light 再推薦,順便介紹WP8 功能展示專案C#
- Java 檔案 IO 操作之 DirectIOJava
- c++ IO類,檔案操作C++
- 檔案IO中基礎操作
- [PY3]——IO——檔案目錄操作
- Android開發之SD卡上檔案操作 (轉)AndroidSD卡
- 文字檔案與二進位制檔案的區別
- IO流之 檔案操作字元流字元
- C檔案與檔案的操作
- Selenium4+Python3系列(九) - 上傳檔案及捲軸操作Python
- GUI與GUILayout的區別——《Unity 3D遊戲開發》GUIUnity3D遊戲開發
- java IO流 對檔案操作的程式碼集合Java
- 檔案 IO 操作的一些最佳實踐
- Pocket pc 與 Smartphone 開發的區別
- Linux中檔案與目錄的區別Linux
- 學習Rust 檔案與 IORust
- 微信開發 檔案上傳
- [PY3]——IO——檔案讀寫
- 檔案IO操作開發筆記(二):使用Cpp的ofstream對磁碟檔案儲存進行效能測試及工具筆記
- 開發WP7專案的好工具: Windows Phone CommandsWindows
- jqm檔案上傳,上傳圖片,jqm的表單操作,jqm的ajax的使用,jqm檔案操作大全,檔案操作demo
- JQ操作類與JS操作類的區別JS
- 29.企業級開發進階1:檔案輸入輸出流[IO操作]