2012-09-14 93 views
2

我想限制某人可以选择的文件夹在我的应用程序中设置其默认保存路径。有没有一种类别或方法可以让我检查访问权限,并且限制用户的选项或者在他们做出选择后显示错误。 FileSystemSecurity.AccessRightType是否有可能?使用FolderBrowserDialog限制对某些文件夹的访问

+0

让用户选择他们想要访问的任何位置会不会更好?毕竟,这是他们的电脑。通过一切手段提供一个你认为合理的默认,但让他们有最后的发言权。 – DavidK

+0

这是为了防止用户挑选他们无权访问的文件夹,但是根本没有显示它? –

+0

@DavidK我必须允许用户设置一个默认的保存路径,但该软件是为了在学校和学院(如我所在的学校)限制访问某些文件夹的情况下实施的。 –

回答

1

由于FolderBrowserDialog是一个相当封闭的控件(它打开一个模式对话框,是否有东西,并让你知道用户选择了什么),我不认为你会有太多的运气拦截用户可以选择或看到。你总是可以让自己的自定义控制,当然;)

至于测试,如果他们有机会获得一个文件夹

private void OnHandlingSomeEvent(object sender, EventArgs e) 
{ 
    DialogResult result = folderBrowserDialog1.ShowDialog(); 
    if(result == DialogResult.OK) 
    { 
     String folderPath = folderBrowserDialog1.SelectedPath; 
     if (UserHasAccess(folderPath)) 
     { 
     // yay! you'd obviously do something for the else part here too... 
     } 
    } 
} 

private bool UserHasAccess(String folderPath) 
{ 
    try 
    { 
    // Attempt to get a list of security permissions from the folder. 
    // This will raise an exception if the path is read only or do not have access to view the permissions. 
    System.Security.AccessControl.DirectorySecurity ds = 
     System.IO.Directory.GetAccessControl(folderPath); 
    return true; 
    } 
    catch (UnauthorizedAccessException) 
    { 
    return false; 
    } 
} 

我要指出,从这个其他的StackOverflow question获得UserHasAccess功能的东西。

+1

非常感谢。这看起来不错。我可以显示一条消息并重置为默认值。至于自定义控件...也许在一两年内。 –

+0

这实际上也解决了另一个问题。当人们想要上传目录或文件时,我可以调用相同的方法来查看是否允许它们。再次感谢。 –