![拒绝访问文件夹](https://linux22.com/image/1565114/%E6%8B%92%E7%BB%9D%E8%AE%BF%E9%97%AE%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我以前遇到过这个问题,但我总是可以通过转到“安全”选项卡,在“属性”中,然后“高级”,最后将管理员添加到访问权限列表中来修复它。但在这种情况下,我实际上有一个 Windows 窗体应用程序,在其中,我使用以下代码:
FileStream config = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
在 C# 中。
这一切在 Visual Studio 中运行良好,但是一旦我构建了项目、在我的计算机上安装了该程序并运行它,它就会创建该文件夹。
由于某种原因,我无法以通常的方式获得权限。它只是给我一条消息“您无权查看或编辑此对象的权限设置。”我不知道为什么。有人能告诉我如何获得权限,或者直接删除该文件夹吗?我的程序出了什么问题,导致这种情况发生?
答案1
假设您拥有必要的管理员权限,您可以随时获得它的所有权。获得所有权后,您必须关闭属性窗口,然后当您返回时,您可以更改权限。我无法谈论您代码中的更改,但我敢打赌您没有该文件夹的“所有权”。
答案2
您还需要致电SetAccessControl
应用更改。
ds = di.GetAccessControl();
ds.AddAccessRule(fsar);
di.SetAccessControl(ds); // nothing happens until you do this
MSDN 上的示例似乎非常缺乏细节,正如讨论的那样这里。我修改了本文中的代码,得到了以下表现良好的代码:
static bool SetAcl()
{
FileSystemRights Rights = (FileSystemRights)0;
Rights = FileSystemRights.FullControl;
// *** Add Access Rule to the actual directory itself
FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights,
InheritanceFlags.None,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow);
DirectoryInfo Info = new DirectoryInfo(destinationDirectory);
DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);
bool Result = false;
Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);
if (!Result)
return false;
// *** Always allow objects to inherit on a directory
InheritanceFlags iFlags = InheritanceFlags.ObjectInherit;
iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
// *** Add Access rule for the inheritance
AccessRule = new FileSystemAccessRule("Users", Rights,
iFlags,
PropagationFlags.InheritOnly,
AccessControlType.Allow);
Result = false;
Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);
if (!Result)
return false;
Info.SetAccessControl(Security);
return true;
}