C#UnauthorizedAccessException到用户文件夹 [英] C# UnauthorizedAccessException to User Folder

查看:231
本文介绍了C#UnauthorizedAccessException到用户文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图列出用户文件夹"Thomas"中的所有文件夹和文件,然后我想获取这些文件夹中的所有文件夹以及文件等.但是,每当我运行它时,它都会引发此异常:

I'm trying to list all folders and files in my User folder which is "Thomas", then I want to get all of the folders in those folders as well as files and so on. But whenever I run it, it throws this exception:

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

由于我拥有访问此文件夹的完全许可权,因此我发现这很奇怪,但是出于某种原因,它却另有说明.

I find this strange since I have FULL permission to access this folder, but for some reason it says other-wise.

所有代码都在下面:

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();
            }

        }
    }
}

推荐答案

您说您拥有完全许可权,但控制台脚本不会以该帐户的特权运行.它以默认用户特权运行,App Data是Windows中的受限文件夹(一般用户不应在其中浏览).

You say you have full permission, but a console script does not run with the priviliges of the account. It runs with default user priviliges, and App Datais a restricted folder in Windows (where normal users are not supposed to poke around).

将控制台应用程序更改为以管理员身份实际运行.有关此操作的信息,请参见以下答案:

Change your console application to actually run as administrator. See this answer on how to do that:

如何强制我的.NET应用程序以管理员身份运行?

这篇关于C#UnauthorizedAccessException到用户文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆