Search code examples
c#.netxmlio

Could not find a part of the path?


I have the following code :

fileinfo = new FileInfo(filePathAndName);

if (!fileinfo.Exists)
{
    using (xmlWriter = new XmlTextWriter(filePathAndName, System.Text.Encoding.UTF8))
    {
        xmlWriter.Formatting = Formatting.Indented;
        xmlWriter.WriteStartDocument();
        xmlWriter.WriteStartElement("root");
        xmlWriter.WriteStartElement("objects");
        xmlWriter.WriteEndElement();
        xmlWriter.WriteEndElement();
        xmlWriter.WriteEndDocument();
        xmlWriter.Close();
    }
}

The filePathAndName will be C:/MyApp%205/Produkter/MyApp%20Utveckling/Host/Orbit.Host.Dev/bin/ExceptionLog.xml.

The folder does exists but the file does not. XmlTextWriter should in this case create the file but instead it throws Could not find part of the path.

It's probably something very obvious I have forgotten here, please help.

Edit : This is how the path really looks like :

C:\MyApp 5\Produkter\MyApp Utveckling\Host\Orbit.Host.Dev\Bin

And this is how the URL that is used in the code is generated :

 (new System.Uri(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "\\ExceptionLog.xml")).AbsolutePath

Solution

  • I've tried the code, ArgumentException is thrown by XmlTextWriter constructor with this message:

    the URI formats are not supported.

    Consider the following code:

    // Get the path to assembly directory.
    // There is a lot of alternatives: http://stackoverflow.com/questions/52797/
    var assemblyPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
    var directoryPath = Path.GetDirectoryName(assemblyPath);
    
    // Path to XML-file.
    var filePath = Path.Combine(directoryPath, "ExceptionLog.xml");
    
    using (var xmlTextWriter = new XmlTextWriter(filePath, Encoding.UTF8))
    {
        ...
    }