2012-09-28 27 views

回答

3

我將現有的sqlite文件添加到項目的公用文件夾,並將生成操作設置爲內容。您無法寫入此文件,因此您需要將其複製到應用程序的本地存儲文件夾中。我創建了一個StorageManagement類來在應用程序啓動時初始化我的數據庫。

public static class StorageManagement 
    { 
     public static async Task<bool> DoesFileExistAsync(string file) 
     { 
      try 
      { 
       await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(file); 
       return true; 
      } 
      catch 
      { 
       return false; 
      } 
     } 

     public static async void InitializeDatabaseAsync() 
     { 
      if (!DoesFileExistAsync("MyDb.sqlite").Result) 
      { 
       string databaseFile = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, @"Common\MyDb.sqlite"); 
       StorageFile file = await StorageFile.GetFileFromPathAsync(databaseFile); 
       await file.CopyAsync(Windows.Storage.ApplicationData.Current.LocalFolder); 
      } 
     } 
    } 

如果數據庫文件不在本地存儲文件夾中,只有這樣它纔會從公用文件夾複製文件。然後我可以使用本地存儲中的文件創建我的sqlite連接。

+0

只要看看這段代碼,DoesFileExistAsync(「MyDb.sqlite」)。結果將導致阻塞當前線程並且不是異步的。 –

0

你有沒有在你的項目文件夾中創建這個「App_Data文件」文件夾?這是行不通的,因爲你只能直接訪問保存在獨立存儲中的應用程序文件,或者你需要用戶從使用filepicker選擇該文件,然後才能在應用

+0

是的,我認爲這將是如此。我能夠將文件上的構建操作屬性設置爲「內容」,這使我可以讀取。在我的情況下沒有幫助。 – Nitesh

1

一種方法是構建訪問一個uri文件,然後用它來訪問文件。

var uri = new Uri("ms-appdata:///local/app_data/database.data"); 
var file = await StorageFile.GetFileFromApplicationUriAsync(uri); 

另一種方法是使用ApplicationData類。

var folder = await ApplictionData.Current.LocalFolder.GetFolderAsync("app_data"); 
var file = await folder.GetFileAsync("database.data"); 
0

我有一個類似的問題。我需要從文本文件中讀取JSON,作爲應用程序的一部分,作爲中間步驟打包,然後才能生成JSON服務。

使用本地存儲是不是這裏的答案,InstalledLocation是東西用於讀取打包爲應用程序的一部分文件,像這樣:

var file = await Package.Current.InstalledLocation.GetFileAsync("app_data\\tempjsonfile.json"); 
    String json = await FileIO.ReadTextAsync(file); 

這從一個JSON文件在App_Data目錄中讀取我在項目中創建。基本要點:在JSON文件的屬性中,將構建操作設置爲「內容」並將「複製到輸出目錄」設置爲「始終複製」。

相關問題