我有一个检查文件夹写入权限的方法。但它给我的错误说不是所有的代码路径都返回一个值?
public bool AccessPackerPlanTemplate(string folderPath)
{
try
{
string path = @"\\Sample";
string NtAccountName = @"Sample";
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All);
AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));
//Go through the rules returned from the DirectorySecurity
foreach (AuthorizationRule rule in rules)
{
//If we find one that matches the identity we are looking for
if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase))
{
//Cast to a FileSystemAccessRule to check for access rights
if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0)
{
//Show the link
}
}
}
}
catch (UnauthorizedAccessException)
{
return false;
}
}
我在这种方法中缺少什么?
答案 0 :(得分:4)
如果未抛出错误,则不返回布尔值。
在try / catch之后,你需要一个返回true / false。
不抛出错误是编译器需要返回类型的可能“代码路径”。
答案 1 :(得分:2)
捕获异常时,您只返回一个值。这就是你的编译器告诉你的原因。
答案 2 :(得分:1)
我会为你的方法推荐这个,因为你没有在所有方面返回一个布尔值:
public bool AccessPackerPlanTemplate(string folderPath)
{
bool result = false;
try
{
string path = @"\\Sample";
string NtAccountName = @"Sample";
//... Your code
if(/*Your Condition*/)
{
result = true;
}
}
catch (UnauthorizedAccessException)
{
result = false;
}
return result;
}