关于 System.IO.File.Exists 需要注意的事项

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

各位:

.NET Framework 本省在设计的时候,他对于异常没有完全做到抛出,这样可能会有很多意想不到的问题。

比如

你在asp.net 应用程序中判断文件是否存在,这个文件可能是一个共享路径 ,比如: System.IO.File.Exists(\montaquehou-missharea.file)

这个文件在资源管理器中可以访问,但是在你的应用程序中一般不能访问。这个时候File.Exists 会返回false,其实文件时存在的。

原因很简单,ASP.NET 默认是本机的 ASPNET 用户,这个用户没有访问权限。

我们看一下File.Exists 的内部实现,(System.IO.FIle 类放在mocorlib.dll 里面,各位可以用类似reflector 之类的工具反编译一下)

public static bool Exists(string path)

{

string[] textArray1;

try

{

if (path == null)

{

return false;

}

if (path.Length == 0)

{

return false;

}

path = Path.GetFullPathInternal(path);

textArray1 = new string[1];

textArray1[0] = path;

new FileIOPermission(1, textArray1, 0, 0).Demand(); //显式的要求一个权限

return File.InternalExists(path);

}

catch (ArgumentException)

{

}

catch (NotSupportedException)

{

}

catch (SecurityException) //出现异常之后并没有抛出

{

}

catch (IOException)

{

}

catch (UnauthorizedAccessException)

{

}

return false; //这就是你看到的false

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航