Could not find a part of the path?

38,811

Solution 1

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))
{
    ...
}

Solution 2

Try this -- add @ before the filePathAndName

string filePathAndName = @"C:\MyApp 5\Produkter\MyApp Utveckling\Host\Orbit.Host.Dev\Bin\text.xml";

FileInfo fileinfo = new FileInfo(filePathAndName);

if (!fileinfo.Exists)
{
    using (XmlTextWriter 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();
    }
}

Solution 3

If you are interacting with a path on a network (aka UNC path), you have to use Server.MapPath to turn a UNC path or virtual path into a physical path that .NET can understand. So anytime you're opening files, creating, updating and deleting files, opening directories and deleting directories on a network path, use Server.MapPath.

Example:

System.IO.Directory.CreateDirectory(Server.MapPath("\\server\path"));
Share:
38,811
Banshee
Author by

Banshee

Updated on July 09, 2022

Comments

  • Banshee
    Banshee almost 2 years

    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