C# 可靠目录。使用C存在#
根据,Directory.Exists可以返回假阴性(该目录存在,但您无法读取它或类似内容)。我想知道是否有一种类似的方法,它不是返回true或false,而是返回一些更有用的信息。。。例如“拒绝访问”或“路径太长”…您可以尝试创建一个对象。如果路径无效或用户无权访问,则构造函数应引发异常。不过,您仍然需要检查它是否存在C# 可靠目录。使用C存在#,c#,io,directory,C#,Io,Directory,根据,Directory.Exists可以返回假阴性(该目录存在,但您无法读取它或类似内容)。我想知道是否有一种类似的方法,它不是返回true或false,而是返回一些更有用的信息。。。例如“拒绝访问”或“路径太长”…您可以尝试创建一个对象。如果路径无效或用户无权访问,则构造函数应引发异常。不过,您仍然需要检查它是否存在 try { var di = new DirectoryInfo(path); if(di.Exists) { //The direct
try
{
var di = new DirectoryInfo(path);
if(di.Exists)
{
//The directory exists
}
else
{
//The path is valid, but does not exist.
}
}
catch(Exception e)
{
//The path is invalid or user does not have access.
}
有一个
目录.GetAccessControl()
方法,可用于获取可列出但不可读的目录:
public static bool DirectoryVisible(string path)
{
try
{
Directory.GetAccessControl(path);
return true;
}
catch (UnauthorizedAccessException)
{
return true;
}
catch
{
return false;
}
}
您还可以使用DirectoryInfo
类。它带有存在
属性和属性
属性。如果在访问属性
属性时引发UnauthorizedAccess异常
,则表示无法访问目录。
此代码可以区分文件是否确实存在,以及文件是否存在但用户没有访问权限
enum ExistState { exist, notExist, inaccessible };
void Check(string name) {
DirectoryInfo di = new DirectoryInfo(name);
ExistState state = ExistState.exist;
if (!di.Exists) {
try {
if ((int)di.Attributes == -1) {
state = ExistState.notExist;
}
} catch (UnauthorizedAccessException) {
state = ExistState.inaccessible;
}
}
Console.WriteLine("{0} {1}", name, state);
}
来源解释DirectoryInfo.Attributes属性记录不正确,不会引发FileNotFound或DirectoryNotFound异常,而是从基础win api函数返回错误值,即0xFFFFFF或-1 如果路径存在但不允许访问,则尝试检索属性将引发异常
如果路径不存在,那么属性将为-1。”我认为
DirectoryInfo
构造函数不会对不存在或您无权访问的路径抛出异常。至少,在我刚刚运行的快速测试中没有。哦,但我现在明白了,你说的是一条真正无效的路径,而不是一条不存在的路径。那么OP的测试有什么好处呢?@adv12请查看MSDN文档的链接。你仍然需要检查它是否如我所说的那样存在。哦,我看到OP想要捕获错误,比如“路径太长”,这会被构造函数捕获。