如何正确确定文件的用户文件系统权限? [复制]
Posted
技术标签:
【中文标题】如何正确确定文件的用户文件系统权限? [复制]【英文标题】:How Do I Properly Determine User File System Permissions for a File? [duplicate] 【发布时间】:2015-09-23 14:10:10 【问题描述】:我目前正在编写一个应用程序,该应用程序需要在给定文件路径的情况下检查当前用户对 Windows 文件系统中文件的权限。该应用程序是用 C# .Net 4.0 编写的。我相信我“在正确的区域”,但需要“开车回家”的帮助。这个问题在正确的范围内:Iterate through permissions on a file in the windows file system in C#,但更关心多个用户 - 我关心当前用户。
这是我目前所拥有的:
FileSecurity fsObj = file.GetAccessControl(AccessControlSections.Access);
foreach (FileSystemAccessRule fsar in fsObj.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
FileSystemRights fsr = fsar.FileSystemRights;
// examine current fsr for permissions...
我的目标是确定用户是否具有文件的写权限。
【问题讨论】:
我不相信您需要检查文件本身的“写入”权限,而是检查文件夹...查看此说明如何执行此操作...***.com/questions/1410127/… 我想我会在这里捕捉异常 - 打开文件进行写入,如果成功,用户 当前 有权写入文件。当然,一纳秒后,权限更改可能会应用到文件并且用户不再具有访问权限,但这是始终有可能,您的程序无法解决这个问题。跨度> 它在内存方面很昂贵,如果你遇到性能问题..你做错了..try catch 超出循环 我认为使用 catch 确实确定一个值是非常糟糕的做法,并且会对性能产生重大影响。如果你很少输入 catch 子句,try 不会影响性能。 问题是,没有办法编写函数“这个用户将来可以写入这个文件吗?”。实际唯一明智的做法是在您打算执行写入的时间点尝试打开文件进行写入。您可以编写任意数量的附加代码,但这并不能解决该特定问题。而且您仍然必须编写在编写时捕获异常的代码。 【参考方案1】:我相信可以这样做(未经测试):
if ((FileSystemRights.Write & fsar.FileSystemRights) != FileSystemRights.Write)
return false;
return true;
【讨论】:
在复杂情况下,FileSystemAccessRule
s 可以是Deny
而不是Allow
。您可能刚刚确认用户已被拒绝写入文件的权利,但回答了true
。
@Damien_The_Unbeliever 我会尝试检查。以上是关于如何正确确定文件的用户文件系统权限? [复制]的主要内容,如果未能解决你的问题,请参考以下文章