首页 新闻 会员 周边 捐助

Global.asax中Application_Start中读取txt文本提示没有权限访问?急

0
悬赏园豆:140 [已解决问题] 解决于 2009-10-20 16:48
<h2><em>对路径&ldquo;d:\freehost\dfd\web\ttoo\1005selected.txt&rdquo;的访问被拒绝。</em> </h2> <p><span style="font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif;"><strong><span style="font-family: Verdana;">说明: </span></strong>执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 <br /><br /><strong><span style="font-family: Verdana;">异常详细信息: </span></strong>System.UnauthorizedAccessException: 对路径&ldquo;d:\freehost\lovko\web\kfoo\1005selected.txt&rdquo;的访问被拒绝。 <br /></span></p> <p><span style="font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif;">我把对这个txt文件的访问写Application_Start事件响应该函数中,报上面的异常!</span></p> <p><span style="font-family: Arial, Helvetica, Geneva, SunSans-Regular, sans-serif;">等Application_Start异常后,再次刷新,进入其它页面,进行同样对该"txt"的操作,一切正常!</span></p> <p><span style="font-family: Arial;">所以想请知道原因的朋友帮忙解答下,感激!</span></p> <p><span style="font-family: Arial;">疑问:如果是权限问题,为什么只有在Global.asax中的时候才会发生异常呢!?如果把同样的代码写在其它的页面或是方法里一切正常!</span></p>
问题补充: 读取文件的代码是这样的,这个代码一模一样的放在其它页面是正常的,我调试过,文件地址也是对的,这个是没有问题的!问题应该在其它的地方! string fullPath = System.IO.Path.Combine(cpath, filePath); string content = string.Empty; if (System.IO.File.Exists(System.IO.Path.Combine(cpath, filePath))) { using (System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Open)) { long l = fs.Length; byte[] bytes = new byte[l]; fs.Read(bytes, 0, bytes.Length); content = Encoding.GetEncoding("gb2312").GetString(bytes); } } else { return; }
chen eric的主页 chen eric | 初学一级 | 园豆:4
提问于:2009-10-05 22:57
< >
分享
最佳答案
0

在web.config里加一句<identity impersonate="true"/>试试。

另外,请参考以下链接:

http://topic.csdn.net/t/20050510/23/3996589.html

http://www.cnblogs.com/zgqys1980/archive/2006/12/28/605877.html

收获园豆:60
Kinglee | 老鸟四级 |园豆:3158 | 2009-10-07 09:13
问题依然没有解决,不过分先给了再说!
chen eric | 园豆:4 (初学一级) | 2009-10-20 16:49
@lovko:d:\freehost\dfd\web\ttoo\1005selected.txt” d:\freehost\dfd\web\ttoo这个文件夹的属性,安全,添加ASPNET用户组,就可以了。 如果没有安全属性,则在文件夹选项中,查看,使用简单文件共享 去掉。
天堂口 | 园豆:514 (小虾三级) | 2009-10-21 15:13
其他回答(2)
0

你是如何操作txt文件的。

Application_Start只在Application启动时执行一次,你再刷新或进入其他页面时,就不会再触发这个事件了。

收获园豆:40
邀月 | 园豆:25475 (高人七级) | 2009-10-06 01:54
呵呵,谢谢回复
支持(0) 反对(0) chen eric | 园豆:4 (初学一级) | 2009-10-20 16:50
0

因为浏览是多线程的,访问这个文件时,加一个排他锁应该就可以了

收获园豆:40
canbeing | 园豆:1287 (小虾三级) | 2009-10-20 12:55
我试了下,用了一个静态变量在标记状态,让它只执行一次,但是好还是不行! static bool isCreated = false; void Application_Start(object sender, EventArgs e) { string cpath = HttpContext.Current.Server.MapPath("."); if (!isCreated) { isCreated = true; 代码像上面的一样!
支持(0) 反对(0) chen eric | 园豆:4 (初学一级) | 2009-10-20 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册