使用 FolderBrowserDialog 限制对某些文件夹的访问

Posted

技术标签:

【中文标题】使用 FolderBrowserDialog 限制对某些文件夹的访问【英文标题】:Restricting access to certain folders with a FolderBrowserDialog 【发布时间】:2012-09-14 09:20:47 【问题描述】:

我想限制人们可以选择在我的应用中设置其默认保存路径的文件夹。是否有一个类或方法可以让我检查访问权限并限制用户的选项或在他们做出选择后显示错误。 FileSystemSecurity.AccessRightType 有可能吗?

【问题讨论】:

让用户选择他们想要访问的任何位置不是更好吗?毕竟是他们的电脑。请务必提供您认为合理的默认设置,但让他们拥有最终决定权。 这是为了防止用户选择他们无权访问但根本不显示的文件夹吗? @DavidK 我必须允许用户设置默认保存路径,但该软件旨在在学生限制访问某些文件夹的学校和学院(如我所在的学院)中实施. @JeffBridgman 这将是一个绝对完美的解决方案,但我不知道如何实现它。有什么想法吗? 【参考方案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;
  

我应该注意到 UserHasAccess 函数的东西是从另一个 *** question 获得的。

【讨论】:

非常感谢。这看起来很棒。我可以显示一条消息并重置为默认值。至于自定义控件...可能在一两年内。 这实际上也解决了另一个问题。当人们想要上传目录或文件时,我可以调用相同的方法来查看是否允许它们。再次感谢。

以上是关于使用 FolderBrowserDialog 限制对某些文件夹的访问的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenFileDialog 作为目录,而不是 FolderBrowserDialog

公司网络上的 FolderBrowserDialog 以选择子文件夹

如何在 FolderBrowserDialog 中设置只读属性

是否可以在 WPF Net 6 应用程序中使用 FolderBrowserDialog?

C# 对话框之FolderBrowserDialog

folderbrowserdialog1 在 Visual Studio 2015 Enterprise Windows 10 中不起作用