Могу ли я получить путь к файлу IsolatedStorage и прочитать его из внешних приложений? - PullRequest
17 голосов
/ 11 июля 2009

Я хочу написать файл, в котором его может прочитать внешнее приложение, но мне также нужны некоторые преимущества IsolatedStorage, в основном страхование от непредвиденных исключений. Могу ли я получить это?

Ответы [ 3 ]

26 голосов
/ 11 июля 2009

Вы можете получить путь к изолированному файлу хранилища на диске, обратившись к закрытому полю класса 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();

Я не уверен, что это рекомендуемая практика.

Имейте в виду, что расположение на диске зависит от версии операционной системы и что вам нужно будет убедиться, что ваше другое приложение имеет разрешения для доступа к этому расположению.

9 голосов
/ 07 ноября 2012

Я использую свойство 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;
}

Этот код протестирован в Windows Phone 8 SDK.

7 голосов
/ 24 марта 2012

Вместо создания временного файла и получения местоположения вы можете получить путь непосредственно из магазина:

var path = store.GetType().GetField("m_RootDir", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(store).ToString();
...