fli*_*ubt 5 c# windows acl novell
我在一个胖客户端应用程序上工作,该应用程序经常遇到访问网络共享的"问题".在使用服务器执行任何IO之前,我的应用程序会测试共享(通常是形式为\\ server\share $)是否存在.这适用于检测客户端已失去与服务器的连接的那些场景,但仍存在隐藏共享存在但用户无权从共享内部读取的奇怪场景.有人可以分享(没有双关语)测试当前用户是否可以读取共享文件所需的C#代码吗?我应该查询共享的ACL还是共享中的文件?如果份额是空的怎么办?如果用户是混合环境中的本地非管理员(XP Pro工作站,Novell网络上没有域的Windows 2003服务器),该怎么办?
Eri*_*bal 10
最简单的方法就是这样做(例如,尝试读取文件).正如Jared所说,没有办法确保您将来能够阅读(网络故障,权限更改等).
就代码而言,您可以使用DirectoryInfo类进行一些答案:
string remotePath = @"\\server\share$";
bool haveAccess = false;
DirectoryInfo di = new DirectoryInfo(remotePath);
if (di.Exists)
{
try
{
// you could also call GetDirectories or GetFiles
// to test them individually
// this will throw an exception if you don't have
// rights to the directory, though
var acl = di.GetAccessControl();
haveAccess = true;
}
catch (UnauthorizedAccessException uae)
{
if (uae.Message.Contains("read-only"))
{
// seems like it is just read-only
haveAccess = true;
}
// no access, sorry
// do something else...
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有许多缺点(例如硬编码的"只读"测试),但它只是用来说明你可以做什么的一个例子.DirectoryInfo还有一些其他辅助方法可用于列出文件夹中的文件.如果您没有访问权限,则这些方法将抛出一个UnauthorizedAccessException
异常,您可以使用该异常来测试访问失败的原因.查看GetAccessControl上的信息,了解有关它抛出的异常的更多详细信息.
归档时间: |
|
查看次数: |
9884 次 |
最近记录: |