Обновление приложения с WP7 на WP8.1. Будет ли WP8.1 ApplicationData обращаться к тем же данным, которые были сохранены с использованием WP7 IsolatedStorageFile?

#windows-phone-7 #windows-phone-8

#windows-phone-7 #windows-телефон-8

Вопрос:

У меня есть приложение для Windows Phone 7, которое продается в магазине уже много лет. Он установлен на устройствах WP 7.x, 8.0 и 8.1. Я конвертирую приложение в целевой WP8.1, чтобы я мог использовать более новый Microsoft AdControl (старый перестанет показывать рекламу в конце года). Это означает, что мне нужно будет начать использовать ApplicationData.Текущий.Локальная папка для чтения / записи данных вместо использования старого файла IsolatedStorageFile.GetUserStoreForApplication().

У моих пользователей есть много данных, которые были сохранены с помощью IsolatedStorageFile.GetUserStoreForApplication(). Если они обновят приложение до версии WP8.1, я хочу быть уверенным, что они не потеряют ни одной из этих данных и что данные по-прежнему будут доступны с помощью ApplicationData.Текущий.Локальная папка.

Кто-нибудь может подтвердить, что это так?

Вот как я записывал данные в 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
    }
}
 

Ответ №1:

Приложение Windows Phone 7, использующее изолированное хранилище:

 var store = IsolatedStorageFile.GetUserStoreForApplication();
 

Windows 8.1 / UWP app:

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

оба приведут к созданию одной и той же папки. Абсолютный путь — это другое:

  1. WP7 — ЭТО: «C:DataUsersDefAppsAppData {YOUR_APP_ID}локальный»
  2. WP 8.1 / UWP: «C:DataUsersDefAppsAppDataLocalPackagesYOURCOMPANY.YOURAPP_SOMEHASHLocalState «

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

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

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

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

Комментарии:

1. Спасибо GeoIT, особенно за дополнительную информацию о PhoneProductId.