NicholaiRen
NicholaiRen

Reputation: 377

How do I create this directory using this function? I keep getting an access denied error.(C#)

First, let me begin by saying I know this appears to be a commonly asked question, but trust me, I've searched extensively and I couldn't find the answer to my question specifically. IF you do happen to know where this specific question was asked, by all means, mark it as a duplicate and reference me there, and accept my apologies for not finding it.

Now, I have a simple if function in my code:

 if (!Directory.Exists(FileDirectory))
 {
      Directory.CreateDirectory(FileDirectory);
 }

However, upon running this if Function, I get this error code:

System.UnauthorizedAccessException: 'Access to the path 'C:\Program Files\LockingProgram\Password.txt;' is denied.'

Now, obviously the problem is that the access is denied. How would I gain access? I have tried simply writing the file instantly, however then it won't find the path

File.WriteAllText(FileDirectory, Password);

throws this error:

System.IO.DirectoryNotFoundException: 'Could not find a part of the path 'C:\Program Files\LockingProgram\Password.txt;'

The FileDirectory string is:

 string FileDirectory = "C:\\Program Files\\LockingProgram\\Password.txt;";

Currently, what the program is trying to do is get a password from the user when they click a button, and then saves that password to a txt file located at the file directory for future reference. When they open the program, it checks if the file exists. If it exists, it sets the password to that file, and if it doesn't it forces the user to enter a string into a text box and from there, I am trying to save it. However, that's where I'm having the problem.

Any help would be greatly appreciated!

Edit: I now understand it's generally a bad idea to save it to Program Files, and you should use AppData instead. I'll try that and update you if it works that time.

Edit 2: It now works. I changed the file directory to:

string FileDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "LockingApp";

And I added a new variable:

string FileName = "Password.txt";

And I modified where the directory is created to:

if (!Directory.Exists(FileDirectory))
{
     Directory.CreateDirectory(FileDirectory);
}

File.WriteAllText(Path.Combine(FileDirectory, FileName), Password);

Thanks for your help guys! Hopefully I formatted this question well.

Upvotes: 0

Views: 113

Answers (2)

Dara Oladapo
Dara Oladapo

Reputation: 596

You can use Isolated Storage for saving files (Seems the easiest and least tasking to use). Check this code sample below

using System;
using System.IO;
using System.IO.IsolatedStorage;

public class CreatingFilesDirectories
{
  public static void Main()
  {
    using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Domain | IsolatedStorageScope.Assembly, null, null))
    {
      isoStore.CreateDirectory("TopLevelDirectory");
      isoStore.CreateDirectory("TopLevelDirectory/SecondLevel");
      isoStore.CreateDirectory("AnotherTopLevelDirectory/InsideDirectory");
      Console.WriteLine("Created directories.");

      isoStore.CreateFile("InTheRoot.txt");
      Console.WriteLine("Created a new file in the root.");

      isoStore.CreateFile("AnotherTopLevelDirectory/InsideDirectory/HereIAm.txt");
      Console.WriteLine("Created a new file in the InsideDirectory.");
    }
  }
}

Upvotes: 1

TheGeneral
TheGeneral

Reputation: 81523

C:\\Program Files\\LockingProgram\\Password.txt;

is not a directory, use

FileDirectory = @"C:\Program Files\LockingProgram";

Directory.CreateDirectory(FileDirectory);

Also there is a probably a good chance you will need to run your program at an elevated privilege or with the appropriate permissions, i.e as an administrator

However there are better places to store data

Where Should I Store my Data and Configuration Files if I Target Multiple OS Versions?

ie AppData, for example

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Upvotes: 1

Related Questions