IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Xdocument .Save(String) inaccessible


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut Xdocument .Save(String) inaccessible
    Bonjour,

    J'ai l'habitude de développer des applications pour windows 7 en utilisant des fichiers XML.
    Actuellement je développe pour Windows 8 et quand j’essaye de sauver mon document XDocument avec la méthode Save(String path), j'ai une erreur "impossible de convertir de 'string' en 'System.IO.Stream'".

    C'est comme si la méthode avec un string en paramètre n’existe pas (Alors qu'elle est décrite sur le site msdn), quelqu'un aurait il une solution ?

    Merci d'avance

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Effectivement c'est étrange l'implémentation de cette méthode save qui attend un path comme paramètre à toujours l'air bien présente. (en tout cas sous Windows7 je n'ai pas encore installé mon Windows8).

    Pour vous dépanner vous pourriez essayer quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    StreamWriter sw = new StreamWriter("TestFile.txt")
     
    doc.save(sw);
     
    sw.close();
    où doc est votre objet XDocument.

    Maintenant quelques lignes de votre code où se produit votre erreur de compilation aiderait peut-être les membres du forum à trouver une solution "plus propre".
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    On peut voir ton code d'ouverture et de sauvegarde ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut
    Merci pour vos réponses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public void Add(String Title, String Content)
            {
                XDocument doc = XDocument.Load(ConnectionString);
                XElement element = new XElement("memo",
                                        new XElement("title", Title),
                                        new XElement("content", Content));
                doc.Element("memos").Add(element);
     
     
                doc.Save(ConnectionString);
            }
    J'ai déjà essayé de faire un XmlWriter mais ça ne marche pas non plus,
    "Impossible de créer une instance de la classe abstraite ou de l'interface 'System.Xml.XmlWriter'"

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    J'imagine que tu es sous WinRT et pas .NET 4.5.

    XDocument.Save(string) n'existe pas en WinRT (tu vois dans la doc qu'il n'y a pas l'icone Windows store (Un sac vert) à côté.

    Il faut utiliser quelque chose comme :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     var doc = XDocument.Parse("<Root>Content</Root>");
     
     var folder = ApplicationData.Current.LocalFolder;
     
     var file = await folder.CreateFileAsync("Myfile.xml");
     
     var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
     
     doc.Save(stream.AsStreamForWrite());

  6. #6
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut
    Merci cette solution semble pas mal !
    J'ai encore quelques problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public async void Add(String Title, String Content)
            {
                XDocument doc = XDocument.Load(ConnectionString);
                XElement element = new XElement("memo",
                                        new XElement("title", Title),
                                        new XElement("content", Content));
                doc.Element("memos").Add(element);
     
                StorageFolder folder = await StorageFolder.GetFolderFromPathAsync("Assets"); 
     
                //var file = await folder.CreateFileAsync(ConnectionString);
     
                Debug.WriteLine(folder.Path);
     
               // var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
     
               // doc.Save(stream.AsStreamForWrite());
            }

    Je ne peux pas crée de folder avec un chemin relatif, quelqu'un aurait la solution ?

  7. #7
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Qu'est ce que tu veux faire exactement ? Si c'est pour trouver le répertoire "Assets" de ta solution, c'est

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var installfolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
     
    var assetsfolder = await installfolder.GetFolderAsync("Assets");

    Mais tu ne peux pas écrire dedans.

  8. #8
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public async void Add(String Title, String Content)
            {
                var installfolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                var assetsfolder = await installfolder.GetFolderAsync("Assets");
                XDocument doc = XDocument.Load(assetsfolder.Path + " /" + ConnectionString);
                XElement element = new XElement("memo",
                                        new XElement("title", Title),
                                        new XElement("content", Content));
                doc.Element("memos").Add(element);
     
     
                var file = await assetsfolder.OpenStreamForWriteAsync(ConnectionString, Windows.Storage.CreationCollisionOption.ReplaceExisting); //Acces Denied
     
                doc.Save(file);
           }
    Voila mon code pour le moment.
    On approche du but merci
    J'ai encore une exception quand j’exécute le code, on me dit que l'accès au fichier est refusé ...

    Merci d'avance

  9. #9
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Oui comme je te l'ai dit, tu ne peux pas écrire (mais tu peux lire) dans le répertoire d'installation. Pour protéger le package de l'application. Tu dois alors utiliser le répertoire local (ApplicationData.Current.LocalFolder)

Discussions similaires

  1. Erreur : DOMDocument::save(): string is not in UTF-8
    Par Pierrick81 dans le forum Langage
    Réponses: 15
    Dernier message: 17/08/2011, 17h20
  2. XDocument et écriture de XML dans une string
    Par blepeign dans le forum Silverlight
    Réponses: 2
    Dernier message: 21/08/2009, 12h35
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo