begin process at 2013 06 18 23:18:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Base de données

 > 

XML

 > 

Problème de sauvegarde de fichier Xml


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de sauvegarde de fichier Xml

mercredi 11 juillet 2012 à 17:28:16 | Problème de sauvegarde de fichier Xml

flamby66

Bonjour,

Donc voilà mon problème lorsque je sauvegarde mon fichier j'obtient l'erreur suivante :
Le processus ne peut pas accéder au fichier 'C:\wamp\www\Teste\Teste.kwmd', car il est en cours d'utilisation par un autre processus.

Explication :
A l'ouverture de mon programme j'appelle se fichier qui me sert a gérer les fichiers du projet puis après quand je veut ajouter un fichier au projet

Le fichier Xml:
Code XML :
<?xml version="1.0" encoding="utf-8"?>
<Gestion>
  <Fichier>
    <index>\index.ktc</index>
  </Fichier>
  <Langue>
    <FRA>\Langue\FRA.lang</FRA>
  </Langue>
</Gestion>


Voilà mon code:
Code C# :
public static string[] Fichier_kwmd(string Chemin, string mot_cle, string value)
        {
            string[] Data = { "", "" }; //Stockage des données
            int nbr_enfant = 0; //Nombre d'enfant dans chaque noeud
            int x = 0;

            FileStream fs = new FileStream(Chemin, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            XmlDocument pDoc = new XmlDocument();
            pDoc.Load(fs);
            fs.Close();


            if (value == "get")
            {
                //Balise <Gestion>
                XmlNode curNode = pDoc.DocumentElement;

                //Nombre d'enfant dans chaque noeud
                for (int i = 0; i < curNode.ChildNodes.Count; i++)
                    nbr_enfant += curNode.ChildNodes.Item(i).ChildNodes.Count;

                //Définition de la taille du tableau
                Data = new string[nbr_enfant];

                //Récuperation des données
                for (int i = 0; i < curNode.ChildNodes.Count; i++)
                {
                    XmlNode ChildNode = curNode.ChildNodes.Item(i);//<TYPE_FICHIER>
                    if (ChildNode.ChildNodes.Count != 0)
                    {
                        for (int j = 0; j < ChildNode.ChildNodes.Count; j++)
                        {
                            XmlNode ValueNode = ChildNode.ChildNodes.Item(j);//<NOM_FICHIER>CHEMIN_FICHIER</NOM_FICHIER>
                            Data[x] = ValueNode.InnerText;
                            x += 1;
                        }
                    }

                }
            }
            else
            {
                XmlNode curNode = pDoc.DocumentElement;

                XmlElement NewNode = pDoc.CreateElement(value);
                NewNode.InnerText = @"\Langue\"+value+".lang";

                for (int i = 0; i < curNode.ChildNodes.Count; i++)
                {
                    if (curNode.ChildNodes.Item(i).Name == mot_cle)
                    {
                        curNode.ChildNodes.Item(i).AppendChild(NewNode);
                        XmlTextWriter xtw = new XmlTextWriter(@"C:\wamp\www\Teste\Teste.kwmd", null);

                        pDoc.WriteContentTo(xtw);
                        xtw.Close();
                    }
                }                
            }

            return Data;
        }


J'ai essayer déjà divers méthode mais aucune marche, j'ai un autre bout de code sur le même principe est lui marche très bien

Code C# :
public static string Gestion_Conception(string Chemin, string Mot_Cle, string Nom, string Value)
        {
            string Data = ""; //Stockage des données

            XmlDocument pDoc = new System.Xml.XmlDocument();
            pDoc.Load(Chemin);
            if (Value == "get")
            {
                //Balise <List>
                XmlNode curNode = pDoc.DocumentElement;
                for (int i = 0; i < curNode.ChildNodes.Count; i++)
                    for (int j = 0; j < curNode.ChildNodes.Item(i).ChildNodes.Count; j++)
                        if (curNode.ChildNodes.Item(i).ChildNodes.Item(j).Name == Mot_Cle)
                        {
                            for (int x = 0; x < curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Count; x++)
                            {
                                if (curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Item(x).Name == Nom)
                                    Data = curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Item(x).InnerText;
                            }
                        }
                if (Data == "")
                    Data = "0";
            }
            else
            {
                XmlNode curNode = pDoc.DocumentElement;

                for (int i = 0; i < curNode.ChildNodes.Count; i++)
                    for (int j = 0; j < curNode.ChildNodes.Item(i).ChildNodes.Count; j++)
                        if (curNode.ChildNodes.Item(i).ChildNodes.Item(j).Name == Mot_Cle)
                            for (int x = 0; x < curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Count; x++)
                                if (curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Item(x).Name == Nom)
                                    curNode.ChildNodes.Item(i).ChildNodes.Item(j).ChildNodes.Item(x).InnerText = Value;

                pDoc.Save(Chemin);
            }
            return Data;

        }

Voilà merci d'avance à celui ou celle qui trouvera mon problème où bien qui a une solution alternative
mercredi 11 juillet 2012 à 20:12:01 | Re : Problème de sauvegarde de fichier Xml

whismeril

Bonjour,

je n'utilise ta méthode pour faire du xml, alors ce que je vais écrire n'est peut être pas juste.

Tu dis que tes deux exemples sont sur le même principe.

Ca n'est pas tout à fait exact, dans le deuxième code tu lis et écrit à partir du xmldocument chargé dans pDoc.
Dans le premier code, tu charges le document dans pDoc et tu veux ensuite l'écrire avec un xmltextwriter, ce qui est différent.

Et ce qui est je pense la source de ton, erreur c'est que tu crées un xmltextwriter vers @"C:\wamp\www\Teste\Teste.kwmd" à chaque boucle et que même si tu as mis un .Close(), la liaison n'a pas le temps d'être clôturée avant la prochaine itération, peut être que
Code C# :
xtw = null;
aiderait un peu mais pas sûr.


Whismeril
mercredi 11 juillet 2012 à 23:45:16 | Re : Problème de sauvegarde de fichier Xml

soussous78

J'ai testé chez moi, ton code fonctionne bien. N'aurais tu pas d'autre routine utilisant le même fichier?

Par contre, tu peux simplifier ton code avec le xpath:
Code C# :
public static string[] Fichier_kwmd(string Chemin, string mot_cle, string value)
{
string[] Data = { "", "" }; //Stockage des données
int nbr_enfant = 0; //Nombre d'enfant dans chaque noeud
int x = 0;

FileStream fs = new FileStream(Chemin, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
XmlDocument pDoc = new XmlDocument();
pDoc.Load(fs);
fs.Close();

if (value == "get")
{
   //Balise <Gestion>
   XmlNode curNode = pDoc.DocumentElement;

   //Nombre d'enfant dans chaque noeud
   nbr_enfant = curNode.SelectNodes("/*/*/*").Count;
   //Définition de la taille du tableau
   Data = new string[nbr_enfant];

   //Récuperation des données
   int _i = 0;
   foreach (XmlNode xn in curNode.SelectNodes("/*/*/*"))
   {
      Data[_i] = xn.InnerText;
      _i++;
   }
}
else
...
jeudi 12 juillet 2012 à 09:48:27 | Re : Problème de sauvegarde de fichier Xml

flamby66

Whismeril :

En fait je me suis tromper dans le code en postant mais bon sa ne change rien l'erreur est la même.

Code C# :
else
                {
                    XmlElement NewNode = pDoc.CreateElement(value);
                    NewNode.InnerText = @"\Langue\FRA.lang";

                    for (int i = 0; i < curNode.ChildNodes.Count; i++)
                    {
                        if (curNode.ChildNodes.Item(i).Name == mot_cle)
                        {
                            curNode.ChildNodes.Item(i).AppendChild(NewNode);
                            pDoc.Save(Chemin);
                        }
                    }
                }

Pour le xtw = null; marche pas malheureusement

Soussous78 :

Merci pour la simplification c'est vrai que mon code n'est pas optimiser du tout

Donc c'est la que je comprend pas car mon fichier je l'ouvre une première fois a l'ouverture de l'application c'est tout après j'y ajoute ou retire une ligne à la fois alors que le deuxième code je l'appel beaucoup de fois est no-problème donc mystère

Merci pour votre aide
jeudi 12 juillet 2012 à 11:53:59 | Re : Problème de sauvegarde de fichier Xml

whismeril

Bonjour,

essaye un pDoc.Close() à la fin de ta métohde Fichier_kwmd,
si tu ouvres une nouvelle instance de ton fichier à chaque fois que tu appelles Fichier_kwmd, ça peut expliquer le bug.


Whismeril
jeudi 12 juillet 2012 à 14:14:52 | Re : Problème de sauvegarde de fichier Xml

flamby66

Il n'y a pas de fonction Close() ou Dispose() pour XmlDocument
jeudi 12 juillet 2012 à 15:38:52 | Re : Problème de sauvegarde de fichier Xml

whismeril

Ha j'avais bien dit que j'écrirais une bêtise!


Whismeril
jeudi 19 juillet 2012 à 18:32:48 | Re : Problème de sauvegarde de fichier Xml

soussous78

Es-ce que en remplacant

Code C# :
XmlTextWriter xtw = new XmlTextWriter(@"C:\wamp\www\Teste\Teste.kwmd", null);
pDoc.WriteContentTo(xtw);
xtw.Close();

par
Code C# :
pDoc.save(@"C:\wamp\www\Teste\Teste.kwmd");


cela fonctionne?


Cette discussion est classée dans : fichier, int, item, childnodes, curnode


Répondre à ce message

Sujets en rapport avec ce message

Ecrire dans un fichier XML [ par Sobieski ] Bon alors voilà, j'ai un fichier XML comme suit : xml version="1.0" encoding="ISO-8859-1" ?> <A onfocus=h() onclick="return false" href="file:///D:/ Convertir un string et int [ par Metabolicman ] Bonjour, Je développe une petite application événementielle pour mes cours et j'ai un petit problème. Je récupère des tarifs dans un fichier .txt et j Application C# qui plante (lecture ecriture fichier) [ par xamox ] Bonjour a tous!! Voila j'ai un problème avec mon application C# qui ne fait que planter. En fait cette application ouvre un certains nombre de fichie supression et écriture d'un fichier [ par wasabis ] bonjours ^^ j'ai pour vous 2 questions. désolé si sa semble évident ou si ces questions ont déja été posé cependant aprés avoir chercher je n'ai rien Appel de class sous windows form [ par Angelssen ] Bonjour a tous avec un ami on passe a Csharp et on a un soucis sur un appel de class, pour faire simple a la fin de la classe on utilisais un return p Surveiller / contrôler un fichier [ par Isa09 ] J'ai à nouveau besoin de votre aide. Quelqu'un aurait-il un lien un code ou quelque chose pouvant m'aider.... J'ai 1code WatchFolder qui me donne une Comment mettre une base de données dans un fichier XML [ par asma07 ] Bonjour à tous, Je suis débutante en XML et je ne sais pas comment mettre une base de données dans un fichier XML.Est-ce que quelqu'un peut m'aider e modification d'un fichier XML sous C# [ par ronaldoccr9 ] bonjour à tous, je suis entrain de réaliser une application de gestion bancaire sous C# en utilisant XML,je vous modifier un compte déjà existant mais DataTable vers Access [ par soupiste ] Salut à la Communauté, Je suis embêté par un sujet qui revient le plus souvent sur le Net, mais auquel je ne parviens pas à trouver la solution. En ef


Nos sponsors


Sondage...

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,987 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales