Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Access to the system path is denied" when using 'System.IO.Directory.Delete'

Tags:

.net

I'm using System.IO.Directory.Delete and trying to delete system folders such as 'My Music', 'My Videos' etc, but I get errors similar to "Access to the system path 'C:\users\jbloggs\Saved Games' is denied". I can however delete these folders via Explorer without any problems, I have full permissions to these folders. Any suggestions on what I can try?

My code:

public static void ClearAttributes(string currentDir)
{
    if (Directory.Exists(currentDir))
    {
        string[] subDirs = Directory.GetDirectories(currentDir);
        foreach (string dir in subDirs)
            ClearAttributes(dir);
        string[] files = files = Directory.GetFiles(currentDir);
        foreach (string file in files)
            File.SetAttributes(file, FileAttributes.Normal);
    }
}

Usage:

try
{
    ClearAttributes(FolderPath);
    System.IO.Directory.Delete("C:\\users\\jbloggs\\Saved Games", true);
}
catch (IOException ex)
{
    MessageBox.Show(ex.Message);
}
like image 486
James T Avatar asked Feb 01 '10 21:02

James T


1 Answers

Yes, that folder has the "read only" attribute set. This would work:

var dir = new DirectoryInfo(@"c:\temp\test");
dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
dir.Delete();

You should always pay attention to the file attributes when you delete stuff. Be sure to stay clear from anything that is System or ReparsePoint. And careful with ReadOnly and Hidden.

like image 85
Hans Passant Avatar answered Oct 15 '22 00:10

Hans Passant