C# 拒绝访问用户文件夹

C# 拒绝访问用户文件夹,c#,C#,我需要在我的User文件夹中找到我的图片。但是我得到运行时错误访问被拒绝 这是我的密码 static void Main(string[] args) { string pic = "*.jpg"; string b = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); string appdata = Path.Combine(b, "AppData"); // I Dont want s

我需要在我的
User
文件夹中找到我的图片。但是我得到运行时错误
访问被拒绝

这是我的密码

static void Main(string[] args)
{
    string pic = "*.jpg";
    string b = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
    string appdata = Path.Combine(b, "AppData"); // I Dont want search in this folder.
    string data = Path.Combine(b, "Data aplikací"); // Here also not.
    foreach (string d in Directory.GetDirectories(b))
    {
        try
        {
            if ((d == data) || (d == appdata))
            {
                continue;
            }
            else
            {
                foreach (string f in Directory.GetFiles(d, pic))
                {
                   //...
                }
            }
        }
        catch (System.Exception excpt)
        {
            Console.WriteLine(excpt.Message);
        }
    }
}

以管理员身份运行应用程序也不起作用。如何避免这种情况?

检查文件夹是否为只读(在windows中)如果是,只需清除只读标志即可

如果它不是只读的,请确保管理员用户对该文件夹拥有完全权限。您可以通过右键单击文件夹-->属性-->安全性来检查这一点

查看此链接以了解有关如何通过编程进行设置的更多信息:

哦,不要去更改你的目录/文件夹权限-那只是在要求将来的痛苦

这里没有“一行程序”解决方案-基本上,您需要递归地遍历文件夹结构,查找您关心的文件,并在过程中吸收/吃掉
未授权的访问异常(通过检查
DirectoryInfo.GetAccessControl
,可以完全避免异常,但这是一个完全不同的问题)

下面是一个blob o’代码:

void Main()
{
    var profilePath = Environment
        .GetFolderPath(Environment.SpecialFolder.UserProfile);
    var imagePattern = "*.jpg";
    var dontLookHere = new[]
    {
        "AppData", "SomeOtherFolder"
    };

    var results = new List<string>();
    var searchStack = new Stack<string>();
    searchStack.Push(profilePath);    
    while(searchStack.Count > 0)
    {    
        var path = searchStack.Pop();
        var folderName = new DirectoryInfo(path).Name;
        if(dontLookHere.Any(verboten => folderName == verboten))
        {
            continue;
        }
        Console.WriteLine("Scanning path {0}", path);
        try
        {
            var images = Directory.EnumerateFiles(
                 path, 
                 imagePattern, 
                 SearchOption.TopDirectoryOnly);
            foreach(var image in images)
            {
                Console.WriteLine("Found an image! {0}", image);
                results.Add(image);
            }
            var subpaths = Directory.EnumerateDirectories(
                  path, 
                  "*.*", 
                  SearchOption.TopDirectoryOnly);
            foreach (var subpath in subpaths)
            {
                searchStack.Push(subpath);
            }
        }
        catch(UnauthorizedAccessException nope)
        {
            Console.WriteLine("Can't access path: {0}", path);
        }
    }
}
void Main()
{
var profilePath=Environment
.GetFolderPath(Environment.SpecialFolder.UserProfile);
var imagePattern=“*.jpg”;
var dontLookHere=new[]
{
“AppData”、“SomeOther文件夹”
};
var results=新列表();
var searchStack=新堆栈();
searchStack.Push(profilePath);
而(searchStack.Count>0)
{    
var path=searchStack.Pop();
var folderName=newdirectoryinfo(path).Name;
if(dontLookHere.Any(verboten=>folderName==verboten))
{
继续;
}
WriteLine(“扫描路径{0}”,路径);
尝试
{
var images=Directory.exe文件(
路径
图像模式,
SearchOption.TopDirectoryOnly);
foreach(图像中的var图像)
{
WriteLine(“找到一个映像!{0}”,映像);
结果:添加(图像);
}
var subpath=Directory.EnumerateDirectories(
路径
"*.*", 
SearchOption.TopDirectoryOnly);
foreach(子路径中的var子路径)
{
searchStack.Push(子路径);
}
}
捕获(未经授权的访问异常否)
{
WriteLine(“无法访问路径:{0}”,路径);
}
}
}

Ou Nice!:)这只是为了阅读。。但是在我的程序中有没有可能解锁它呢?:)我更新了我的答案,如果你正在研究如何通过编程实现这一点,那么如果你只是在谷歌上搜索abit,就会有很多关于如何实现这一点的博客/教程。哦,请不要这样做-配置文件文件夹上有读/写权限是有原因的;如果有其他方法,请不要使用核弹。您可能还需要确保该文件夹不是系统文件夹或隐藏文件夹。只要我的2美分。