2012-02-17 3 views
9

J'ai une simple fonction C# qui crée un fichier XML de base et enregistre:XmlDocument Enregistrer conserve fichier ouvert

private void CreateXMlFile(string Filename, string Name, string Company) 
     { 
      XmlDocument doc = new XmlDocument(); 
      XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
      doc.AppendChild(docNode); 

      XmlNode licenseNode = doc.CreateElement("license"); 
      doc.AppendChild(licenseNode); 

      XmlNode node = doc.CreateElement("Name"); 
      node.AppendChild(doc.CreateTextNode(Name)); 
      licenseNode.AppendChild(node); 

      node = doc.CreateElement("Company"); 
      node.AppendChild(doc.CreateTextNode(Company)); 
      licenseNode.AppendChild(node); 


      doc.Save(Filename); 
     } 

Lorsque je tente de modifier ou de supprimer le fichier que je reçois toujours l'erreur suivante:

The process cannot access the file because it is being used by another process.

XmlDocument ne dispose pas de routines de fermeture ou de fermeture intégrées et je me demandais comment je pouvais forcer la fermeture du fichier avant de le modifier ou de le supprimer ultérieurement.

J'ai essayé d'enregistrer le fichier en utilisant StreamWriter:

StreamWriter outStream = System.IO.File.CreateText(outfile); 
      outStream.Write(data); 
      outStream.Close(); 

Mais cela na pas faire une différence avec la même erreur.

Votre avis est grandement accepté.

Merci

+0

Avez-vous essayé de l'écrire avec une instance d'un flux d'écriture au lieu de passer le nom de fichier à enregistrer? – Steve

+0

J'ai eu le même problème, mais mon code chargeait le code XML en premier s'il existait. L'objet 'XmlReader' devait être fermé avant que le verrou sur le fichier ne soit libéré. –

Répondre

1

Votre code fonctionne très bien. Je l'ai testé sur ma machine et il n'y a plus de verrou après Save(). Essayez d'utiliser Unlocker (http://www.softpedia.com/get/System/System-Miscellaneous/Unlocker.shtml) pour vérifier si vous êtes vraiment celui qui détient le verrou.

Quel framework .NET utilisez-vous? Theres aussi un rapport (http://bytes.com/topic/net/answers/467028-xmldocument-save-does-not-close-file-properly) qui n'était pas reproductible aussi.

+0

Son étant verrouillé par le studio visuel vshost.exe. Je viens de compilé à .net 3.5 et même problème. – Belliez

+0

Pourriez-vous créer un projet vide avec cette méthode appelée par un clic de bouton et vérifier après le clic si le fichier est verrouillé? – BlueM

4

Envoie le flux vers la méthode Save de XmlDocument au lieu du nom de fichier. J'ai essayé d'exécuter le code ci-dessus et il fonctionne très bien à ma fin.

+0

J'ai essayé cela et quand je vais supprimer le fichier, j'ai la même erreur. – Belliez

+0

Pouvez-vous essayer de changer l'emplacement du fichier? – AshokD

+0

essayé un nouvel emplacement également et même. J'ai également désactivé Livedrive (sauvegarde en ligne) au cas où cela interfèrerait. – Belliez