Работа с Silverlight 5 на изолированном хранилище запрещена - PullRequest
1 голос
/ 24 января 2012

Я создаю файл в изолированном хранилище, а затем тот же файл доступен и редактируется по нажатию кнопки.Но иногда исключение происходило с деталями, что работа на изолированном хранилище запрещена.Это исключение не имеет фиксированного времени, которое иногда возникает при первом нажатии кнопки, иногда это происходит после 5-го или 6-го нажатия и т. Д. Функция ISOFileProcess (String module, String operation, String xmlObj) в приведенном ниже коде вызывается при нажатии кнопки.

public static void ISOFileProcess(String module, String operation, String xmlObj)
    {

        var  store = IsolatedStorageFile.GetUserStoreForApplication();

        if (store.FileExists(IsolatedMemFileHandlingCon.fileName) == false)
        {
            StreamWriter sw = new StreamWriter(store.OpenFile(IsolatedMemFileHandlingCon.fileName, FileMode.OpenOrCreate));
            CreateXML(sw,module,operation,xmlObj);

            sw.Close();
            MessageBox.Show("File Created.");
        }
        else
        {

            //store.OpenFile(IsolatedMemFileHandlingCon.fileName, FileMode.Append);

            IsolatedStorageFileStream isoStream =
                    new IsolatedStorageFileStream(IsolatedMemFileHandlingCon.fileName, FileMode.Append, FileAccess.ReadWrite, store);


            EditXML(isoStream, module, operation, xmlObj);

            isoStream.Close();


        }
    } 

    #endregion

    #region XML Creation And Editing
    private static void CreateXML(StreamWriter sw, String mname, String operation, String xmlObj)
    {

        XmlWriter xWrt = XmlWriter.Create(sw);

        xWrt.WriteStartElement("ocs");
       // xWrt.WriteStartElement("module");

        xWrt.WriteStartElement("operation");

        xWrt.WriteAttributeString("mode", operation);
        xWrt.WriteAttributeString("mname", mname);

        xWrt.WriteRaw(xmlObj);
        xWrt.WriteEndElement();
        //xWrt.WriteEndElement();

        xWrt.WriteEndElement();

        xWrt.Close();
    }

    private static void EditXML(IsolatedStorageFileStream sw, String mname, String operation, String xmlObj)
    {
        sw.Seek(sw.Length - 6, SeekOrigin.Begin);
        XmlWriterSettings wrSettings = new XmlWriterSettings();
        wrSettings.OmitXmlDeclaration = true;


        XmlWriter xWrt = XmlWriter.Create(sw,wrSettings);


        //xWrt.WriteStartElement("module");

        xWrt.WriteStartElement("operation");
        xWrt.WriteAttributeString("mode", operation);
        xWrt.WriteAttributeString("mname", mname);

        xWrt.WriteRaw(xmlObj);

        xWrt.WriteEndElement();
        //xWrt.WriteEndElement();

        xWrt.WriteRaw("</ocs>");

        xWrt.Close();

    }

1 Ответ

2 голосов
/ 24 января 2012

Здесь вы указываете FileMode.Append:

 IsolatedStorageFileStream isoStream =
     new IsolatedStorageFileStream(
         IsolatedMemFileHandlingCon.fileName,
         FileMode.Append,
         FileAccess.ReadWrite, store);

Append не сочетается с FileAccess.ReadWrite и с перемещением курсора до конца файла.

В используемом вами кодепроизвольный доступ, перемещение курсора назад:

 sw.Seek(sw.Length - 6, SeekOrigin.Begin);

из MSDN :

Append Открывает файл, если он существует, и ищет в концефайл или создает новый файл.FileMode.Append можно использовать только в сочетании с FileAccess.Write.Попытка поиска позиции до конца файла приводит к возникновению IOException, а любая попытка чтения завершается неудачей и вызывает исключение NotSupportedException.

...