Accueil > Forum > > > > Problème de sauvegarde de fichier Xml
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# : 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
Livres en rapport
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Forum
REGION MEMOIREREGION MEMOIRE par atoukc
Cliquez pour lire la suite par atoukc
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|