我需要在User
文件夹中找到我的照片。但是我得到了运行时错误Access Denied
这是我的代码
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);
}
}
}
以管理员身份运行应用程序也不起作用。怎么避免这个?
答案 0 :(得分:2)
检查文件夹是否只读(在Windows中),如果是,只需清除只读标志。
如果它不是只读的,请确保admin用户拥有该文件夹的完全权限。您可以通过右键单击文件夹来检查这一点 - >属性 - >安全
查看此链接以获取有关如何以编程方式设置它的更多信息: C# - Set Directory Permissions for All Users in Windows 7
答案 1 :(得分:1)
哦,不要改变您的目录/文件夹权限 - 这只是要求将来的痛苦。
这里没有“单行”解决方案 - 基本上,你需要递归遍历文件夹结构,寻找你关心的文件,并沿途吸收/吃掉UnauthorizedAccessExceptions
(你可以避免通过检查DirectoryInfo.GetAccessControl
完全例外,但这是一个完全不同的问题)
这是一个blob o'code:
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);
}
}
}