C# UnauthorizedAccessException для папки пользователя
Я пытаюсь перечислить все папки и файлы в папке "Пользователь", которая называется "Томас", затем я хочу получить все папки в этих папках, а также файлы и так далее. Но всякий раз, когда я запускаю его, он выдает это исключение:
System.UnauthorizedAccessException: Access to the path 'C:\Users\Thomas\AppData\Local\Application Data' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.AddSearchableDirsToStack(SearchData localSearchData)
at System.IO.FileSystemEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.IO.Directory.GetDirectories(String path, String searchPattern, SearchOption searchOption)
at GetFilesInFolders.Program.Main(String[] args) in c:\users\thomas\documents\visual studio 2017\Projects\GetFilesInFolders\GetFilesInFolders\Program.cs:line 23
Я нахожу это странным, поскольку у меня есть ПОЛНОЕ разрешение на доступ к этой папке, но по какой-то причине это говорит иначе.
Весь код ниже:
using System;
using System.IO;
using System.Collections.Generic;
namespace GetFilesInFolders
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter a path: ");
string path = Console.ReadLine();
int UnauthorizedAccessCount = 0;//counter for file i cant access
List<string> DirList = new List<string>();
List<string> FileList = new List<string>();
try
{
if (Directory.Exists(path))
{
foreach (string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
{
DirList.Add(dir);
}
foreach (string file in Directory.GetFiles(path, "*", SearchOption.AllDirectories))
{
FileList.Add(file);
}
}
else
{
Console.WriteLine("Directory does not exist!");
Console.ReadKey();
return;
}
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("{0}", ex);
}
if(FileList.Count == 0)
{
Console.WriteLine("There were no files, or you didn't have proper permissions. (You didn't have permission to {0} files or folders", UnauthorizedAccessCount);
Console.ReadKey();
}
if(DirList.Count == 0)
{
Console.WriteLine("There were no folders, or you didn't have proper permissions. (You didn't have permission to {0} files or folders", UnauthorizedAccessCount);
Console.ReadLine();
}
else
{
Console.WriteLine("Here are all the folders:\n");
foreach (string dir in DirList)
{
Console.WriteLine(dir);
}
Console.WriteLine("Here are all the files:\n");
foreach (string file in FileList)
{
Console.WriteLine(file);
}
if (UnauthorizedAccessCount != 0)
{
Console.WriteLine("You had no permission to access {0} files.", UnauthorizedAccessCount);
}
else
{
}
Console.ReadLine();
}
}
}
}
1 ответ
Вы говорите, что имеете полное разрешение, но консольный сценарий не запускается с правами учетной записи. Он работает с привилегиями пользователя по умолчанию, и App Data
это закрытая папка в Windows (где обычные пользователи не должны возиться)
Измените консольное приложение, чтобы оно действительно запускалось от имени администратора. Посмотрите этот ответ о том, как это сделать:
Как заставить мое приложение.NET запускаться от имени администратора?