Aziz Qureshi
Aziz Qureshi

Reputation: 279

Cannot delete a file IO Exception:

I have a function that translates a xml file using a xsl style sheet. It does the job fine; but when I want to delete that transformed file sometimes I get the following error: System.IO.IOException: The process cannot access the file

The function is like this:

XslTransform transform = new XslTransform();

transform.Load('xsl_style_sheet');

transform.Transform('fullpath/xmlfilename','fullpath/transformedFileName')

XElement xEle = XElement.Load('fullpath/transformedFileName');

I do what ever with the xEle and in the end I want to delete the 'fullpath/transformedFileName' but some times i get the dreaded System.IO.IOException: The process cannot access the file

Can any one please help. A million thanks

Upvotes: 2

Views: 338

Answers (1)

rene
rene

Reputation: 42494

Use the XslCompiledTranform class (XslTranform is obsolete ) and the overload on Transform that accepts an XmlReader and XmlWriter. You can call Dispose on them, they will take care of closing and disposing the underlying stream.

// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("xsl_style_sheet");

// Create the writer.
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = "\t";
using(XmlWriter writer = XmlWriter.Create("fullpath/transformedFileName", settings))
{
   using(XmlReader reader = XmlReader.Create("fullpath/xmlfilename"))
   {
     reader.MoveToContent();
     xslt.Transform(reader, writer);
   }
}

using(XmlReader reader = XmlReader.Create("fullpath/transformedFileName"))
{
   XElement xEle = XElement.Load(reader);
   // do all other stuff you need to do here


   // after this the file will be closed
}

Upvotes: 2

Related Questions