關於Windows Phone資料庫和Silverlight本地檔案操作

來源:互聯網
上載者:User
前言

最近在調試C# Sqlite for Windows Phone 7,瞭解了一下Silverlight的本地檔案操作,把想法記錄下來。

 

Isolated Storage(隔離儲存區 (Isolated Storage)空間)

Isolated Storage是針對各個獨立使用者指派的單獨的虛擬儲存空間,在Windows會儲存在\%AppData%\LocalLow\Microsoft\Silverlight\is, 而在Mac OS X會儲存在 /Users/<user>/Library/Application Support/Microsoft/Silverlight/is。

Isolated Storage有點像cookies,每個使用者隔離儲存區 (Isolated Storage),Isolated Storage的容量是有配額的,但是可以通過調用System.IO.IsolatedStorage.IsolatedStorageFile.IncreaseQuotaTo()來增加容量。

為Isolated Storage的地址。

 

 

無論瀏覽器版本的Silverlight還是Out Of Browser都可以自由使用Isolated Storage

IsolatedStorageFile theStore = IsolatedStorageFile.GetUserStoreForApplication();
FileStream fs = new System.IO.IsolatedStorage.IsolatedStorageFileStream(@"wp.db", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, theStore);

可以在Isolated Storage裡面自由的增加,修改刪除檔案和目錄。

theStore.CreateDirectory("db");

但是不能把Isolated Storage外面的檔案拷貝到Isolated Storage裡面。這個為開發帶來很多困難,例如我想把sqlite的資料庫檔案存放到XAP裡面一同發布,然後把這個資料檔案存放到到Isolated Storage裡面,以後可以對這資料庫繼續修改,資料還是儲存在Isolated Storage裡面。可是不能把XAP裡面的檔案拷貝到Isolated Storage裡面,沒辦法使用預先定義的資料。

從我的文件拷貝資料到Isolated Storage的時候出錯。

 

在Out of Browser中使用我的文件

如果使用了Out of Browser,程式可以中使用我的文件(My Documents)的檔案。

 

在項目屬性中選擇 "Enable running application out of browser",然後點擊 "Out-of-Browser Settings",然後選擇"Required elevated trust when running outside the browser"

 

 

if (App.Current.HasElevatedPermissions)
{
FileStream stream = new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\wp.db", FileMode.OpenOrCreate);
string streamobject = new StreamReader(stream).ReadToEnd();
}

配置完畢以後就可以使用我的文件的檔案了。使用我的文件的檔案,App.Current.HasElevatedPermissions必須為true.

 

使用內嵌資源檔

所謂內嵌資源檔就是把程式需要用到的offline檔案打包到XAP包裡面。可以參考 Silverlight如何內嵌資源,適用於Windows Phone

 

XDocument xDoc = XDocument.Load(@"db/wp.xml");

程式可以讀取xml檔案。

 

Image image = new Image();
image.Source = new BitmapImage(new Uri("Images/" + station.Image, UriKind.Relative));

也可以使用圖片檔案。

 

但是不能開啟檔案進行操作。

 

SaveFileDialog

SaveFileDialog 為使用者提供了把檔案儲存到其他目錄的可能性,但是其具有限制性,必須由使用者操作,不能直接通過程式把檔案儲存到其他位置上。

SaveFileDialog textDialog;
public MainPage()
{
InitializeComponent();
textDialog = new SaveFileDialog();
textDialog.Filter = "Text Files | *.txt";
textDialog.DefaultExt = "txt";
}

private void button1_Click(object sender, RoutedEventArgs e)
{
bool? result = textDialog.ShowDialog();
if (result == true)
{
System.IO.Stream fileStream = textDialog.OpenFile();
System.IO.StreamWriter sw = new System.IO.StreamWriter(fileStream);
sw.WriteLine("Writing some text in the file.");
sw.Flush();
sw.Close();
}
}

 

關於Windows Phone資料庫的思考

 

Windows Phone不支援直接操作物理檔案。沿用了傳統Silverlight的做法,使用了Isolated Storage的虛擬目錄空間。我想Isolated Storage對於Silverlight來說是不錯的做法,程式不能直接操作物理檔案,這樣有效防止病毒的傳播。但是Windows Phone從檔案系統的角度看就是一台PC,如果PC本地程式(例如Winform和WPF)都不能操作物理檔案,那也太杯具了。如果這個問題一直不能解決,Windows Phone第三方資料庫永遠都會有突破,因為沒辦法把預先定義的資料讀取出來。

 

目前解決方案有二: 1. 等待微軟出SQL CE for Windows Phone。我們不可以做,不代表微軟不可以做,微軟可以寫原生代碼(native C++)的。理論上什麼都能做出來。 2. 使用雲和網路儲存,沒想到微軟現在走的那麼前,比google還絕,什麼都用雲。之前認為微軟是重點關注案頭系統,因為大部分收入來源於Windows和Office,而google重點關注Web,由於沒有自身的作業系統,什麼都想使用Web一統天下。但是從微軟發布IE9對HTML5的支援可以看到,微軟也對Web和雲投入很大。但是基於Windows Phone來說,還是提供本地支援比較好,因為行動裝置網路連通性沒有其他電腦裝置好,離線應用還具有很大市場。

相關文章

聯繫我們

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