How to get access to system folders when enumerating directories?

Haji Tag picture Haji Tag · Sep 24, 2011 · Viewed 7.9k times · Source

I am using this code:

DirectoryInfo dir = new DirectoryInfo("D:\\");
foreach (FileInfo file in dir.GetFiles("*.*",SearchOption.AllDirectories))
{
    MessageBox.Show(file.FullName);
}

I get this error:

UnauthorizedAccessException was unhandled

Access to the path 'D:\System Volume Information\' is denied.

How might I solve this?

Answer

Kamil Krasinski picture Kamil Krasinski · Sep 24, 2011

There is no way in .NET to override privileges of the user you are running this code as.

There's only 1 option really. Make sure only admin runs this code or you run it under admin account. It is advisable that you either put "try catch" block and handle this exception or before you run the code you check that the user is an administrator:

WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
WindowsPrincipal currentPrincipal = new WindowsPrincipal(currentIdentity);
if (currentPrincipal.IsInRole(WindowsBuiltInRole.Administrator))
{
DirectoryInfo dir = new DirectoryInfo("D:\\");
foreach (FileInfo file in dir.GetFiles("*.*",SearchOption.AllDirectories))
{
MessageBox.Show(file.FullName);
}
}