c#, xml.Load() de verrouillage de fichier sur le disque à l'origine des erreurs
J'ai une classe simple XmlFileHelper comme suit:
public class XmlFileHelper
{
#region Private Members
private XmlDocument xmlDoc = new XmlDocument();
private string xmlFilePath;
#endregion
#region Constructor
public XmlFileHelper(string xmlFilePath)
{
this.xmlFilePath = xmlFilePath;
xmlDoc.Load(xmlFilePath);
}
#endregion
#region Public Methods
public XmlNode SelectSingleNode(string xPathQuery)
{
return xmlDoc.SelectSingleNode(xPathQuery);
}
public string GetAttributeValueByName(XmlNode node, string attributeName)
{
return node.Attributes.GetNamedItem(attributeName).Value;
}
#endregion
#region Public Properties
public string XmlFilePath
{
get
{
return xmlFilePath;
}
}
#endregion
}
Le problème est que je reçois le message d'erreur suivant sur la Charge:
System.IO.IOException: The process cannot access the file ''C:\CvarUAT\ReportWriterSettings.xml'' **because it is being used by another process**
cela se produit lorsque cette classe est utilisée par les deux instances en cours d'exécution d'un composant en parallèle à la fois d'essayer de charger le fichier xml ci-dessus, c'est légitime comportement et requis par l'application.
Je ne veux lire dans le fichier xml du disque une fois et relâchez toute référence au fichier sur le disque et l'utilisation d'une mémoire de la représentation à partir de ce point en avant.
J'aurais assumé la Charge fonctionne en lecture seule de la mode et n'a pas besoin de verrouiller le fichier, ce qui est mon meilleur moyen d'obtenir le résultat souhaité et obtenir autour de cette question?
Grâce
Vous devez vous connecter pour publier un commentaire.
cela dépend de ce que vous avez besoin à partir du fichier,
Si vous en avez besoin pour être threasdsafe vous auriez besoin de impliment un mutex pour bloquer le chargement entre instance,
Si vous n'avez pas vraiment besoin de thread-safe de chargement (c'est à dire le fichier ne change jamais), vous pouvez le charger via un filestream puis de charger le XmlDocument à partir du flux
Vous pouvez le faire
au lieu de
Si le fichier n'est pas trop grande pour lire dans la mémoire de tous à la fois:
essayer: