我需要测试用户是否可以在实际尝试之前写入文件夹.
我已经实现了以下方法(在C#2.0中),它尝试使用Directory.GetAccessControl()方法检索文件夹的安全权限.
private bool hasWriteAccessToFolder(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 = Directory.GetAccessControl(folderPath);
return true;
}
catch (UnauthorizedAccessException)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
当我在谷歌搜索如何测试写入访问时,没有出现这样的情况,实际测试Windows中的权限似乎非常复杂.我担心我过度简化了事情并且这种方法并不健全,尽管它似乎确实有效.
我的方法是否可以测试当前用户是否具有写访问权限?
我需要通过计算机上的各种目录(通过DirectoryInfo).其中一些不可访问,并发生UnauthorizedAccessException.如何在不捕获异常的情况下检查目录访问?
可能重复:
.NET - 检查目录是否可访问而不进行异常处理
我使用.NET 3.5和C#在Visual Studio 2010中制作一个小文件浏览器,我有这个功能来检查目录是否可访问:
RealPath=@"c:\System Volume Information";
public bool IsAccessible()
{
//get directory info
DirectoryInfo realpath = new DirectoryInfo(RealPath);
try
{
//if GetDirectories works then is accessible
realpath.GetDirectories();
return true;
}
catch (Exception)
{
//if exception is not accesible
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为对于大目录,尝试让所有子目录检查目录是否可访问可能会很慢.我在尝试探索受保护的文件夹或没有光盘的cd/dvd驱动器时使用此功能来防止错误("设备未就绪"错误).
是否有更好的方法(更快)检查应用程序是否可以访问目录(最好是在NET 3.5中)?
在.NET中,有一种简单的方法可以检查当前用户是否有权在目录中创建文件?相当于C++ _access函数的东西是理想的.
我不想使用反复试验(创建一个虚拟文件然后删除它):除了看似hackish之外,其他软件正在监视有问题的目录以查找丢弃的文件.
我不想使用System.DirectoryServices:查看ACL,解析组成员身份以及来自不同组成员身份的权限如何交互似乎容易出错且太难.某处肯定有一个好的或不可能的功能,不是吗?
提前致谢!
[编辑]作为奖励,如果它也适用于网络共享,那就太酷了.
在我的网站上,我想创建一个新文件夹,然后复制其中的一些文件,我也想html通过C#代码创建一个文件.我想知道
我正在使用Asp.net MVC 2和C#.
显然,许多应用程序需要处理文件并向用户显示错误.然而,System.IO.File类的成员抛出了很多例外.这些仅适用于ReadAllText:
那么如何抓住它们并将其显示给用户而不会吞下其他异常?
显然,通过完美的编码,您可以消除这些2:
如果你写了一个(可能是痛苦的)检查,你可以消除PathTooLongException.但是为什么要复制用于检查Microsoft编写的代码?
但即使您进行了所有检查,其他例外仍然可能发生:
打开文件时可以删除文件和文件夹,安全权限可以更改等.
除了向用户显示消息之外,我没有看到您在这些场景中可以做什么.你要找到操作系统找不到的目录吗?修复权限?将代码注入操作系统以支持不支持的操作?大声笑我所看到的可能是显示错误信息.
因此,如果每次打开文件读取文本时都必须捕获所有这些异常,那么我的代码必须很长且重复,除非我通过捕获异常来吞下异常.
创建FileException并捕获在实际处理文件时可能出现的所有异常是一种好习惯吗?我的想法是:
public class FileException : Exception
{
public FileException( Exception e )
: base( e.Message, e.InnerException )
{
}
}
public static class FileNoBS
{
public static string ReadAllText2( string path )
{
try
{
return File.ReadAllText( path );
}
catch ( ArgumentNullException e )
{
throw new FileException( e );
}
catch …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何检查写入目录或文件的权限?
我试图弄清楚是否可以确定所请求的文件目录是否可写并且当前用户是否具有写入该文件夹的正确权限.
到目前为止,我正在通过创建新目录,将临时文件写入其中并将其删除(临时文件和目录)来测试所请求的路径.
此操作非常有问题,因为该目录可能已经存在并且其所有旧信息都可能丢失(当目录删除时).
任何的想法 ??TX ...