Как получить доступ к папке? - C#
Формулировка задачи:
Здравствуйте.
При сборе информации о папках на компе, вылетает исключение UnauthorizedAccessException (access denied) при попытке доступа к папке Documents and Settings.
Подскажите пожалуйста, как решить данную проблему?
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace Directories
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var drives = DriveInfo.GetDrives();
TreeNode tree;
foreach (var dr in drives)
{
if (dr.DriveType == DriveType.Fixed)
{
tree = new TreeNode(dr.Name);
treeView1.Nodes.Add(tree);
Dir(dr.Name, tree);
}
}
}
private static void Dir(string path, TreeNode tree)
{
try
{
var dir = new DirectoryInfo(path);
var array = dir.GetDirectories(); //здесь вылетает exception
if (array.Length == 0)
return;
foreach (DirectoryInfo t in array)
{
var tree1 = tree.Nodes.Add(t.Name);
Dir(path + "\\" + t.Name, tree1);
}
}
catch(UnauthorizedAccessException ae)
{
}
}
}
}Решение задачи: «Как получить доступ к папке?»
textual
Листинг программы
using System.Security.AccessControl;
using System.IO;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//объявляет метод
public static void AddFileSecurity(string fileName, string account,
FileSystemRights rights, AccessControlType controlType)
{
// Get a FileSecurity object that represents the
// current security settings.
FileSecurity fSecurity = File.GetAccessControl(fileName);
// Add the FileSystemAccessRule to the security settings.
fSecurity.AddAccessRule(new FileSystemAccessRule(account,
rights, controlType));
// Set the new access settings.
File.SetAccessControl(fileName, fSecurity);
}
private void button1_Click(object sender, EventArgs e)
{
try
{
string fileName = @"C:\Documents and Settings";
//получаем имя компьютора и пользователя
System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
string user = wi.Name;
// Add the access control entry to the file.
AddFileSecurity(fileName, @user,
FileSystemRights.FullControl, AccessControlType.Allow);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}