Как записать поток в xml-файл в изолированном хранилище

Я пытаюсь внедрить резервную копию SkyDrive в свое приложение. Все работает нормально, за исключением того, что я понятия не имею, как легко сохранить поток (с загруженной резервной копией из SkyDrive) в изолированное хранилище.

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

Итак, вот моя проблема:

У меня есть поток с файлом из SkyDrive, и мне нужно сохранить его в IsolatedStorage как файл «Settings.XML».

Итак, в основном мне нужно записать «поток» в файл Settings.xml в изолированном хранилище.

        static void client_DownloadCompleted(object sender, LiveDownloadCompletedEventArgs e, string saveToPath)
    {
        Stream stream = e.Result; //Need to write this into IS

        try
        {
            using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(saveToPath, FileMode.Create))
                {
                    //How to save it?

                }
            }
        }...

Спасибо!


person Petrroll    schedule 19.05.2012    source источник


Ответы (2)


Используйте метод CopyTo() Steam — http://msdn.microsoft.com/en-us/library/dd782932.aspx

using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(saveToPath, FileMode.Create))    
{    
  stream.CopyTo(fileStream);
} 
person Chris Gessler    schedule 19.05.2012

Самое быстрое и простое действие — это скопировать байты поблочно из одного потока в другой — см. принятый ответ в Как скопировать содержимое одного потока в другой?


Однако, если есть вероятность того, что сетевой поток будет поврежден или будет содержать недопустимые данные, возможно, стоит десериализовать поток и проверить его перед сохранением.

person Stuart    schedule 19.05.2012
comment
Хорошо, я скопирую содержимое потока SkyDrive в локальный поток IsolatedStorage. Но как я его потом сохраню (в файл)? - person Petrroll; 19.05.2012
comment
Этот поток iso в вашем примере кода поддерживается файлом :), что дает вам openFile. - person Stuart; 19.05.2012
comment
using означает, что Dispose() будет вызываться в потоке, что будет означать, что Close() произойдет - person Stuart; 19.05.2012