flamby66
Messages postés3Date d'inscriptiondimanche 7 mars 2010StatutMembreDernière intervention12 juillet 2012
-
11 juil. 2012 à 17:28
soussous78
Messages postés47Date d'inscriptionmardi 21 novembre 2006StatutMembreDernière intervention 5 novembre 2016
-
19 juil. 2012 à 18:32
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
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 11 juil. 2012 à 20:12
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
soussous78
Messages postés47Date d'inscriptionmardi 21 novembre 2006StatutMembreDernière intervention 5 novembre 2016 11 juil. 2012 à 23:45
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:
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
...
flamby66
Messages postés3Date d'inscriptiondimanche 7 mars 2010StatutMembreDernière intervention12 juillet 2012 12 juil. 2012 à 09:48
Whismeril :
En fait je me suis tromper dans le code en postant mais bon sa ne change rien l'erreur est la même.
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
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024656 12 juil. 2012 à 11:53
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
Vous n’avez pas trouvé la réponse que vous recherchez ?