2016-10-13 91 views
0

我有一個Windows Phone 7應用程序,已經在商店多年了。它安裝在WP 7.x,8.0和8.1設備上。我將應用程序轉換爲WP8.1目標,因此我可以使用較新的Microsoft AdControl(舊版本會在年底停止投放廣告)。這意味着我將需要開始使用ApplicationData.Current.LocalFolder讀取/寫入數據,而不是使用舊的IsolatedStorageFile.GetUserStoreForApplication()。WP7到WP8.1應用程序更新。 WP8.1 ApplicationData是否會訪問使用WP7 IsolatedStorageFile存儲的相同數據?

我的用戶有很多使用IsolatedStorageFile.GetUserStoreForApplication()存儲的數據。如果他們將應用程序升級到WP8.1版本,我想確保它們不會丟失任何這些數據,並且仍然可以使用ApplicationData.Current.LocalFolder訪問數據。

任何人都可以證實這種情況嗎?

這是我如何WP7寫道數據:

using (IsolatedStorageFile applicationStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    using (IsolatedStorageFileStream file = applicationStorage.OpenFile(filename, FileMode.Create, FileAccess.Write)) 
    { 
     using (StreamWriter sw = new StreamWriter(file)) 
     { 
      sw.WriteLine("some data goes here"); 
     } 
    } 
} 

這是怎麼了,我將讀取數據在WP8.1:使用獨立存儲

using (Stream stream = await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(filename)) 
{ 
    using (StreamReader sr = new StreamReader(stream)) 
    { 
     String line = sr.ReadLine(); 
     // Do something with line 
    } 
} 

回答

3

Windows Phone 7的應用程序,:

var store = IsolatedStorageFile.GetUserStoreForApplication(); 

的Windows 8.1/UWP應用:

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 

兩者都會導致相同的文件夾。絕對路徑是不同的:

  1. WP7是: 「C:\數據\用戶\ DefApps \應用程序數據\ {YOUR_APP_ID} \本地」
  2. WP 8.1/UWP:「C:\數據\ Users \用戶DefApps \ AppData \ Local \ Packages \ YOURCOMPANY.YOURAPP_SOMEHASH \ LocalState「

但兩個路徑將共享相同的文件夾/文件裏面。最重要的是編輯Package.appxmanifest XML。在Visual Studio中,單擊鼠標右鍵「查看代碼」(不要通過「查看設計器」打開)。在這個XML,你必須編輯此行:

<mp:PhoneIdentity PhoneProductId="NEW_APP_ID" PhonePublisherId="00000000-0000-0000-0000-000000000000" /> 

由舊的publisherId由舊WP7應用程序的Id和PhonePublisherId更換PhoneProductId(從舊WP7應用程序也是如此)。如果你不這樣做,該代碼會給你不同的文件夾(WP 8.1/UWP代碼給你空的文件夾)。但是,使用此更改的ID,您將收到包含所有舊數據的相同文件夾。

安裝後,新的應用程序將替換您的舊應用程序。

+0

感謝GeoIT,特別是關於PhoneProductId的額外部分。 – Jared