Недостаток прав для перемещения файла с рабочего стола
Переношу файл с рабочего стола в папку, выдает исключение: System.UnauthorizedAccessException: "Отказано в доступе по данному пути."
В файле манифеста приложения прописаны права администратора.
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Исключение появляется на моменте File.Move();
Код:
static void Main()
{
List<string> filesList = new List<string>();
var userName = Environment.UserName;
string path = MainDrive().ToString() + @"Users\" + userName + @"\Desktop\";
DirectoryInfo directoryInfo = new DirectoryInfo(path);
var files = directoryInfo.GetFiles(); // System.IO.FileInfo[]
for (int i = 0; i < files.Length; i++)
{
filesList.Add(files[i].ToString());
}
filesList.RemoveAt(0);
string pathTrash = @"F:\10. Trash";
File.Move(path+filesList[1],pathTrash);
// filesList - список всех файлов на рабочем столе, тип - string.
Console.Read();
}
public static DriveInfo MainDrive()
{
DriveInfo[] drives = DriveInfo.GetDrives();
return drives[0];
}
Ответы (1 шт):
Путь к папке Desktop лучше определять следующим образом:
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Используйте метод Environment.GetFolderPath и перечислениее Environment.SpecialFolder.
Ваш метод MainDrive становится не нужен.
Для соединения путей следует использовать метод Path.Combine.
Почистив ваш код, получаем следующее:
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string trashPath = @"F:\Trash";
var directoryInfo = new DirectoryInfo(desktopPath);
foreach (var file in directoryInfo.GetFiles())
{
var destination = Path.Combine(trashPath, file.Name);
File.Move(file.FullName, destination);
}
Здесь все файлы переносятся с теми же именами.
Этот код никак не решает проблему с "Access denied", но я не мог пройти мимо и не дать советы и полезные ссылки.