Question

Je crée un fichier en stockage isolé, puis le même fichier est accédé et être édité en cliquant sur le bouton.Mais parfois une exception survenue de détail que l'opération n'est pas autorisée sur le stockage isolé.Cette exception n'a pas de temps fixe est parfois survenue sur un clic de boutonnage d'un premier clic qu'il a occuléré après le 5ème ou le 6ème clic, etc. isofileProcess (module de chaîne, opération de chaîne, chaîne xmlobj) dans le code ci-dessous est appelé clic sur le bouton.

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();

    }

Était-ce utile?

La solution

Vous spécifiez filemode.append ici:

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

APPEND ne se combine pas avec des fichiers en filaccess.readwewrite et en déplaçant le curseur avant la fin du fichier.

Dans le code que vous utilisez un accès aléatoire, déplacez le curseur:

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

à partir du MSDN :

APPEND Ouvre le fichier s'il existe et cherche à la fin du fichier, ou crée un nouveau fichier.Filemode.append ne peut être utilisé que conjointement avec filaccess.write.Tenter de chercher à une position avant la fin du fichier lancera une exception IoException et toute tentative de lecture échoue et jette une notaupportedexception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top