Могу ли я получить путь для файла IsolStorage и прочитать его из внешних приложений?
Я хочу написать файл, в котором внешнее приложение может его прочитать, но я также хочу воспользоваться некоторыми преимуществами IsolStorage, в основном страхованием от неожиданных исключений. Могу ли я получить его?
Ответы
Ответ 1
Вы можете получить путь к изолированному файлу хранилища на диске, обратившись к частному полю класса IsolatedStorageFileStream
, используя отражение. Вот пример:
// Create a file in isolated storage.
IsolatedStorageFile store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("test.txt", FileMode.Create, store);
StreamWriter writer = new StreamWriter(stream);
writer.WriteLine("Hello");
writer.Close();
stream.Close();
// Retrieve the actual path of the file using reflection.
string path = stream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(stream).ToString();
Я не уверен, что рекомендуемая практика.
Имейте в виду, что местоположение на диске зависит от версии операционной системы и что вам нужно убедиться, что ваше другое приложение имеет разрешения на доступ к этому местоположению.
Ответ 2
Я использую свойство Name FileStream.
private static string GetAbsolutePath(string filename)
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
string absoulutePath = null;
if (isoStore.FileExists(filename))
{
IsolatedStorageFileStream output = new IsolatedStorageFileStream(filename, FileMode.Open, isoStore);
absoulutePath = output.Name;
output.Close();
output = null;
}
return absoulutePath;
}
Этот код протестирован в SDK Windows Phone 8.
Ответ 3
Вместо создания временного файла и получения местоположения вы можете напрямую получить путь из магазина:
var path = store.GetType().GetField("m_RootDir", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(store).ToString();