Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Access to the path ... is denied" (.NET C#)

I've been saving a small XML data file to an external drive, no probs. But then I tried to use the ApplicationData folder and others, even C:\ but no luck. I'm getting an error like "Access to the path "C:\" denied".

Just to confirm, the file is created and read fine with the current code, to an external drive. I guess this is something to do with security & permissions but I haven't found anything too useful.

Thanks in advance if you can point me in the right direction on this one!

        string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml";  //  external drive ok :-)
        //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        //string fipData = @"C:\";

        //  if the XML data file doesn't exist, create it
        bool dataFileExists = File.Exists(fipData);
        if (dataFileExists)
        {
            //  read the XML values
            XDocument xData = XDocument.Load(fipData);
            //...
        }
        else
        {
            //  create & save the XML data file
            XElement xLastPath = new XElement(el_lastPath, "");
            XElement xLastCode = new XElement(el_lastCode, "");

            XElement xRoot = new XElement(el_root);
            xRoot.Add(xLastPath);
            xRoot.Add(xLastCode);

            XDocument newDataFile = new XDocument();
            newDataFile.Add(xRoot);

            try
            {
                newDataFile.Save(fipData);
            }
            catch (Exception ex)
            {   
                MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message));
            }
        }
like image 489
MrGreggles Avatar asked Sep 20 '09 12:09

MrGreggles


People also ask

Why is access to the path denied C#?

Often, it happens because your application tries to save some data or read some data from that path or file but the client system doesn't provide rights to access the path. Most developers face this "Access Denied" issue while installing their desktop application on a client system.

What is UnauthorizedAccessException C#?

An UnauthorizedAccessException exception is thrown when the operating system denies access because of an I/O error or a security error. If you are attempting to access a file or registry key, make sure it is not read-only.


1 Answers

In the comments to another answer you say this is a desktop application, so lets treat each location separately.

Under Vista and beyond, an ordinary user does not have rights to create files in the root directory of the system drive (usually C:). You can see this for yourself by opening C:\ in explorer, right clicking and trying to create a file - you should get a UAC prompt. So if you want to write to C:\ then your application needs to run as an administrator, via a suitable manifest demanding elevation, or by starting a separate process when you want to write to that location.

Application Data, Environment.SpecialFolder.ApplicationData should however work. If you output the actual directory that returns what do you get?

like image 171
blowdart Avatar answered Oct 12 '22 23:10

blowdart