.net framework提供了三个途径创建目录:
Directory.CreateDirectory(string)
DirectoryInfo.Create()
DirectoryInfo.CreateSubdirectory(string)通过以上任何一种途径,只要权限许可,都可以成功创建目录。在创建时.net将自动根据路径从驱动器开始逐级检查目录是否存在(不存在就创建),可谓比较智能化了。本来这是没什么问题的,但要命的是在asp.net中就出问题了。为了安全,web站点一般只给站点根目录分配权限,比如只给aspnet帐户拥有C:\inetpub\wwwroot的完全控制权限而不会拥有C:或者C:\inetpub的任何权限。在这样的情况下,以上三种创建目录的方式都因找不到目录c:\inetpub(因为没有读权限,自然找不到,但能找到wwwroot目录)而引起异常:
“未找到路径“E:\”的一部分”换句话说,在这样的情况下无法创建目录。本来我是想反编译dll后看看微软是怎么实现Directory类的,然后自己写一个类来解决,不过没找到dll文件中的Directory类。哪位有高招解决这个问题?
Directory.CreateDirectory(string)
DirectoryInfo.Create()
DirectoryInfo.CreateSubdirectory(string)通过以上任何一种途径,只要权限许可,都可以成功创建目录。在创建时.net将自动根据路径从驱动器开始逐级检查目录是否存在(不存在就创建),可谓比较智能化了。本来这是没什么问题的,但要命的是在asp.net中就出问题了。为了安全,web站点一般只给站点根目录分配权限,比如只给aspnet帐户拥有C:\inetpub\wwwroot的完全控制权限而不会拥有C:或者C:\inetpub的任何权限。在这样的情况下,以上三种创建目录的方式都因找不到目录c:\inetpub(因为没有读权限,自然找不到,但能找到wwwroot目录)而引起异常:
“未找到路径“E:\”的一部分”换句话说,在这样的情况下无法创建目录。本来我是想反编译dll后看看微软是怎么实现Directory类的,然后自己写一个类来解决,不过没找到dll文件中的Directory类。哪位有高招解决这个问题?
再将要访问的目录的访问权限,放给aspnet帐户
然后用反射调用它里面的方法
如果是虛擬主機,不可能讓你在你沒有權限的地方訪問文件,這個道理顯而易見.
你可以从ApplicationPath映射的物理路径作为根目录开始查找。不知你创建目录做什么用?能说明用意么?也许方案上有问题。
fso如果可以,那么,楼主调用fso试试object fso = HttpContext.Current.Server.CreateObject("Scripting.FileSystemObject");
然后用反射调用它里面的方法
能详细说说吗。如何调用,如何创建
点击 添加 按钮,查找并且选择 ASPNET 用户:
然后点击 确定按钮,这时会出现一个窗口,让您选择此用户所能拥有的权限。在这里,我们将除了 "读取属性" 这个权限不拒绝以外,其它的全部拒绝(不将"读取属性"这一项拒绝是非常重要的,如果将其拒绝,则会导致ASP.NET程序在拥有权限的目录下也不能完成所有的操作(如在自己的目录下创建目录时提示: 未找到路径“X:\”的一部分 这样的错误)
这样,ASP.NET程序就只能对其所在目录进行操作,而无法涉及到其它的文件目录。如果想在D盘创建目录的话,那就在刚才的地方开启ASPNET读写权限就行了
==========================================
我也碰到这样的问题,而且客户的服务器是托管的,找了对方的管理员,就是不肯给这样的权限(我们也理解对方的做法),正郁闷中呢
搜到这个,试一下,我有时间再试
设置ASPNET帐号权限,没必要,只要设置读取和列表权限
//
do whatever you want to under the impersonated account
//
Impersonate.Undo当然是要调用Win32 API 的。 advapi32 -> LogonUser
advapi32 -> DuplicateToken
kernel32 -> CloseHandle
这个问题确实存在,要想在此盘下创建目录必须拥有此盘根目录的读取权限(一般设置IIS_WPG组),以及父目录的读写权限,但并不是楼主说的各级父目录的读取权限,其原因可能是.NET在建立目录时需要从磁盘根目录读取一些关于目录的特殊信息,不知道这算不算是.NET的一个BUG. 楼主可以向虚机服务商说明此问题,因为只是磁盘根目录的读取权限,应该不会对安全造成多大影响。实在不行就只能用FSO或其它方法了其实关于ASP.NET的安全问题一直是让虚机服务商头疼的,因为不太容易控制网站的可访问目录
因为ASP网站其默认的运行权限是其匿名登录用户,可通过给每个网站建一个用户的方式来控制其可访目录,而ASP.NET程序运行权限取决于其应用程序池安全账户设置,默认为 网络服务,属于IIS_WPG组,很多服务商都是把ASP.NET网站的根目录设为IIS_WPG组 完全控制权限,这样做的安全问题就是,你可以访问其它站点的根目录,并可完全控制,很恐怖哟。所以说仅仅一个磁盘根目录的读取权限根本不算什么的。 :)=========================================四海之内皆兄弟!