2016-10-13 1 views
0

У меня есть приложение Windows Phone 7, которое уже много лет находится в магазине. Он устанавливается на устройствах WP 7.x, 8.0 и 8.1. Я конвертирую приложение в целевой WP8.1, поэтому я могу использовать новый Microsoft AdControl (старый будет прекращать показ объявлений в конце года). Это означает, что мне нужно будет начать использовать ApplicationData.Current.LocalFolder для чтения/записи данных, вместо использования старого изолированного объекта InventorRile.GetUserStoreForApplication().Обновление приложения WP7 до WP8.1. Будет ли WP8.1 ApplicationData доступ к тем же данным, которые были сохранены с использованием WP7 IsolStorageFile?

У моих пользователей есть много данных, которые были сохранены с использованием IsolStorageFile.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 IS: "C: \ Data \ Users \ DefApps \ AppData \ {YOUR_APP_ID} \ Local"
  2. WP 8.1/UWP: «C: \ Data \ Users \ DefApps \ AppData \ Local \ Packages \ YOURCOMPANY.YOURAPP_SOMEHASH \ LocalState "

но оба пути будут совместно использовать одну и ту же папку/файлы внутри. Самое главное - отредактировать Package.appxmanifest XML. В Visual Studio нажмите правой кнопкой мыши на "Просмотреть код" (не открыть по "View Designer"). В этом XML вы должны изменить эту строку:

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

Заменить PhoneProductId от Id вашего старого WP7 App и PhonePublisherId вашего старого PublisherId (от старого WP7 App тоже). Если вы этого не сделаете, эти коды предоставят вам разные папки (код WP 8.1/UWP дает вам пустую папку). Однако, с этими измененными идентификаторами вы получите одну и ту же папку со всеми старыми данными.

Новое приложение заменит ваше старое приложение после установки.

+0

Спасибо GeoIT, особенно за дополнительную деталь о PhoneProductId. – Jared

Смежные вопросы