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 :

[C#] Ressource incorporée XML qui ne s'ouvre pas


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut [C#] Ressource incorporée XML qui ne s'ouvre pas
    Bonjour,
    Dans mon application j'ai quelques fichiers XML dans le dossier 'Resources' qui me servent de base de données. A l'installation, je les place dans un répertoire où l'application peut les trouver en cas d'appel. Je les installe sans problème avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Stream _stream = _assembly.GetManifestResourceStream(sNomComplet);
                                byte[] bytesInStream = new byte[_stream.Length];
                                try
                                {
                                    WriteFile(PathBaseXML, "XMLCatégories.xml", bytesInStream);
                                }
                                catch (Exception ex)
                                {
                                    _bNoMatches = true;
                                    _sMessageErreur = ex.Message;
                                }
    Et pour y accéder j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                string sXPathQuery = "";
                string sPathDocuments = ConnexionBaseRegistres.chercherParamètreBaseRegistres("Path Base XML");
                sPathDocuments = sPathDocuments + "XMLRenseignementsGénéraux.xml";
                sXPathQuery = "//Pays";
                XPathNodeIterator Nodes;
                try
                {
                    XPathDocument doc = new XPathDocument(sPathDocuments);
    etc...
    Mais quand j'arrive à cette dernière instruction, j'ai un message d'erreur qui me dit que "L'élément racine est manquant". Et de plus, lorsque je veux ouvrir le document dans son répertoire, le bloc-notes s'affiche mais rien n'y apparait.
    Quelqu'un aurait-il une idée de ce qui se passe ?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut
    J'ai oublié de donner le code de la méthode WriteFile():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static void WriteFile(string pathXML, string filename, byte[] bytes)
            {
                string sPath = pathXML;
                if (!sPath.EndsWith(@"\")) sPath += @"\";
                sPath = sPath + filename;
                using (FileStream fs = new FileStream(sPath, FileMode.CreateNew, FileAccess.Write))
                {
                    fs.Write(bytes, 0, (int)bytes.Length);
                    fs.Close();
                }
            }
    Cela permettra peut-être de trouver une indication.

  3. #3
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Tu as peut-être un problème d'encodage dans ta méthode WriteFile....... pourquoi n'utilises-tu pas ceci pour extraire ta resource incorporée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     System.IO.File.WriteAllText(@"D:\XMLCatégories.xml", Properties.Resources.XMLCatégories);

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 447
    Par défaut
    Bonjour,
    Je vois bien une déclaration du tableau bytesInStream, mais aucune affectation. Le tableau est donc vide...

    Tatayo.

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Je vois bien une déclaration du tableau bytesInStream, mais aucune affectation. Le tableau est donc vide...

    Tatayo.
    L'affectation se fait dans la méthode WriteFile par le biais de son 3ème argument

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut
    Merci pour l'attention que vous portez à mon problème.
    J'ai utilisé la méthode WriteAllText() comme me le suggérait Wallace mais maintenant j'ai un message d'erreur qui me dit: "Impossible de trouver une partie du chemin d'accès" de PathBaseXML alors qu'avec la méthode FileStream() le chemin était trouvé sans problème ... !?

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 447
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    L'affectation se fait dans la méthode WriteFile par le biais de son 3ème argument
    Pour moi c'est l'inverse: WriteFile tente de sauvegarder le contenu du tableau, et non de le remplir. Je vois bien un fs.Write, mais aucune lecture.
    Donc pour moi cette méthode enregistre un tableau vide.

    Tatayo.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 12
    Par défaut
    Si je suis le raisonnement de tatayo je dois d'abord lire et ensuite écrire. J'ai essayé ceci mais sans résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
               using (FileStream fs = new FileStream(sPath, FileMode.CreateNew, FileAccess.ReadWrite))
               {
                    fs.Read(bytes, 0, (int)bytes.Length);
                    fs.Write(bytes, 0, (int)bytes.Length);
                    fs.Close();
                }
    Mais la taille des fichiers enregistrés est indiquée. Cela ne veut-il pas dire que le nombre d'octets est présent ?

  9. #9
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Pour moi c'est l'inverse: WriteFile tente de sauvegarder le contenu du tableau, et non de le remplir. Je vois bien un fs.Write, mais aucune lecture.
    Donc pour moi cette méthode enregistre un tableau vide.

    Tatayo.
    Effectivement en relisant tu as raison.

    @OP : File.WriteAllText doit fonctionner donc maintenant il faut voir à quoi ressemble ton chemin ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PDF qui ne s'ouvre pas sous IE
    Par keub51 dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 11h56
  2. [WD11] Fenetre qui ne s'ouvre pas
    Par hegros dans le forum WinDev
    Réponses: 29
    Dernier message: 27/03/2007, 11h33
  3. Réponses: 4
    Dernier message: 12/10/2006, 12h43
  4. [BDS 2006] Fichier d'aide qui ne s'ouvre pas
    Par doudoustephane dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/08/2006, 20h07
  5. Fenetre qui ne s'ouvre pas
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/06/2006, 11h23

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