大侠请看下面的代码:
public void WebConfig_Mod(ArrayList newinfo,string docName)
{
try
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(docName);

XmlNode node =  doc.SelectSingleNode("//appSettings");      
if( node == null )
{
throw new InvalidOperationException( "appSettings section not found");
}
XmlNodeList xnl = node.ChildNodes;
for(int i=0;i<xnl.Count;i++)
{
XmlElement Elem= (XmlElement)xnl[i];
Elem.SetAttribute("value",newinfo[i].ToString());
}
XmlTextWriter writer = new XmlTextWriter(docName,null); 
writer.Formatting = Formatting.Indented;    
doc.WriteTo( writer );    
writer.Flush(); 
writer.Close();
}
catch(Exception e)
{
throw new Exception(e.Message);
}
}这段代码前面运行都没有问题,只是到了XmlTextWriter writer = new XmlTextWriter(docName,null); 
就会提示错误:{@"对路径“C:\Inetpub\wwwroot\Test\web.config”的访问被拒绝。" }
我不知道是什麽原因,都折腾一上午了。对了,写入权限是有的,各位大侠有什麽高见?

解决方案 »

  1.   

    用 WebConfigurationManager 类就可以。
      

  2.   

    这个类没见过。命名空间是什麽呀?怎麽MSDN中都找不到呢?请再说详细一点儿好吗!
      

  3.   

    后台代码:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml ;
    namespace WebApplication1
    {
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.DropDownList DropDownList1;
    protected System.Web.UI.WebControls.Button Button1;public WebForm1()
    {
    Page.Init += new System.EventHandler(Page_Init);
    }private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    //打开某文件(假设WEB。CONFIG在根目录中)
    string filename=Server.MapPath("/") + @"\web.config";
    XmlDocument xmldoc= new XmlDocument();
    xmldoc.Load(filename);XmlNodeList topM=xmldoc.DocumentElement.ChildNodes;
    foreach(XmlElement element in topM)
    {
    if(element.Name.ToLower()=="appsettings")
    {
    XmlNodeList _node=element.ChildNodes;
    if ( _node.Count >0 )
    {
    DropDownList1.Items.Clear();
    foreach(XmlElement el in _node)
    {
    DropDownList1.Items.Add(el.Attributes["key"].InnerXml);
    }
    }
    }
    }
    }
    }private void Page_Init(object sender, EventArgs e)
    {
    InitializeComponent();
    }#region Web Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()

    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load);}
    #endregionprivate void Button1_Click(object sender, System.EventArgs e)
    {
    string filename=Server.MapPath("/") + @"\web.config";
    XmlDocument xmldoc= new XmlDocument();
    xmldoc.Load(filename);XmlNodeList topM=xmldoc.DocumentElement.ChildNodes;
    foreach(XmlElement element in topM)
    {
    if(element.Name.ToLower()=="appsettings")
    {
    XmlNodeList _node=element.ChildNodes;
    if ( _node.Count >0 ) 
    {
    foreach(XmlElement el in _node)
    {
    if(el.Attributes["key"].InnerXml.ToLower()==this.DropDownList1.SelectedItem.Value.ToLower())
    {
    el.Attributes["value"].Value=this.TextBox1.Text;
    }
    }
    }
    }
    }
    xmldoc.Save(filename);
    }
    }

      

  4.   

    wmt85(深山老翁) ,用你的方法还是不行。到xmldoc.Save(filename);这句依然会报错::{@"对路径“C:\Inetpub\wwwroot\Test\web.config”的访问被拒绝。" }
    有没有人知道是为什么?是不是根本不能动态修改web.config呀?遇到过这类问题的人帮帮忙吧!在线等……
      

  5.   

    文件夹拒绝写入,dotnet权限不够的写入权限不够,请修test的属性,可读写。
      

  6.   

    你是说IIS中的写入权限吗?有权限啊!读取和写入都有的。会不会是因为运行过程中,那个文件受保护拒绝被修改啊?
      

  7.   

    web.config在運行時是不可以修改的
      

  8.   

    Test文件夹的权限设置Everyone用户为完全控制看:_
      

  9.   

    楼上老兄,哪里有你说的那种设置呀?我怎麽没有找到!
    xjliang007(痛并快乐着) :你说不能修改有什么根据吗?还是你试过了肯定不能改?
      

  10.   

    web.config在運行時是不可以修改的
      

  11.   

    IIS 或是 文件夹的权限不够。 是NTFS 还是FAT32
      

  12.   

    应该是权限没有设置好,因为我们平时可以在iis运行的时候用记事本修改web.config的内容,这个就说明我们是可以动态修改web.config
      

  13.   

    http://singlepine.cnblogs.com/articles/293683.html
      

  14.   

    如果你的代码是在Web应用程序中,出现访问被拒绝的问题是必须的,如果不出现你的Web服务器就是最危险的!
    如果你的代码是在Windows应用程序中,出现访问被拒绝的问题应该是你运行你的Windows程序的操作系统用户没有对web.config的写入权限
      

  15.   

    在Web应用程序中,当前执行代码的用户是IIS的匿名用户(默认情况下),而该用户绝对不允许对web.config进行写入操作,否则意味着所有访问你的Web应用程序的人都可能修改你的web.config。要解决这个问题,可以考虑动态切换当前执行代码的用户为对web.config有权限的用户。
      

  16.   

    Web.Config一旦被重新写,那么其对应的网站的Session将失效,相当于重新启动该网站了.
    这个是被系统在运行时监控的. 难道你想每次都让网站重新启动一下吗?建议不要作类似的工作啊.当然,要非这么干,也不要在网站本身中去做,写个外部的exe程序,去强行修改吧.
      

  17.   

    應該這麽說Web.Config一修改,Session即不存在,當然,如果你是純粹的HTML文檔沒什麽問題,如果
    是其它,估計是不行的,最少用戶信息等都不會存在了.樓主是不是要重新登錄呢?個人認為,動態更
    改Web.Config只是理論上的可行,實際是沒有意義的,不知道LZ
      

  18.   

    多谢各位的建议和讲解,虽然众说纷纭,看得我有些糊涂,嘿嘿……我之所以想修改Web.Config,其实是因为它里面有一些设置是另外一个系统初始化时用到的,而将来使用的人可能会根据需要修改那些设置,因此做了一个给用户使用的修改界面。考虑到大家的建议,我想最好还是不要修改Web.Config了,把那部分设置单独拿出来作为一个新的HTML文件,修改的时候就读写这个文件了。大家看看这样是不是就可以啦?
      

  19.   

    web.config在運行時是不可以修改的
    ------------------------------------
    谁说的!
      

  20.   

    改它干吗,删了原来的重新创建一个config
      

  21.   

    我现在发现,即便是修改一个纯粹的HTML文件,保存的时候也会提示相同的错误:{@"对路径“C:\Inetpub\wwwroot\Test\VacationDays.xml”的访问被拒绝。" }
    这是不是说明问题确实出在权限上?可是,我已经将IIS中Test的属性选上了“读取”和“写入”,但是C:\Inetpub\wwwroot\路径下的Test文件夹的属性是“只读”。不知道问题究竟出在哪里,我还应该修改谁的权限呢?
    还请各位高手再指教一下~~
      

  22.   

    web.config在运行的时候是不能修改的,一修改IIS就会重起,就好象自杀一样
      

  23.   

    设置aspnet帐户的权限,谁说修改web.Config,iis会重启?别胡说行不行?
      

  24.   

    Kshatriya(无聊) ,大家是讨论问题,怎么能说别人是胡说呢? 修改了Web.Config之后,当前网站的Session就会失效,需要重新登录系统。 当然IIS不会重启,但WEB系统的确会重新初始化啊。当然,你(或其他的高手)都有办法来控制修改Web.COnfig而不重新初试化该web系统,但我认为最好还是以框架本身的常规做法为准--不重新初始化,你当前修改的Web.Config不会自动生效,有什么意义呢?难道还要专门再写一个文件监控的接口?
      

  25.   

    注:上面的一贴说的.NET Framework 1.1的情况。 
    在VS 2005下,配置文件的整个模型发生了改变,应该是可以比较方便的修改配置文件了吧。
      

  26.   

    多谢各位高人的意见。我的这个小问题好像引发了一场讨论,还是比较有意义的,虽然最后的讨论结果还是不明朗,两派的争论似乎谁也说服不了谁。我的问题已经解决了。过程是这样:我修改了文件夹的权限,Web.config文件可以修改了,但是修改之后系统需要重新登陆一下才行,可能原因就是大家提到的需要重新初始化的要求吧!
    本想结贴的,但是看到大家讨论的如此热烈,就再放几天吧^_^
      

  27.   

    Web.config修改后,IIS当然不会重新启动。
    但以前的进程会结束,IIS会重新启动一个新的进程,所以,以前的内存都将清理掉。
    这是一个很好的整理内存的方法(以前我的项目不知道一个什么原因,要IIS重新启动,没办法,我就修改一下config,让IIS自己重新启动进程,当然,后来修改了错误)。
    动态修改文件是可以的,但要注意你的程序运行时,有两个书用户账号你要注意一下:
    一个是你的计算机名+XX(IIS的运行账号),这是你的IIS进程运行的账号,一般,这个账号可以对wwwroot里的所有文件都有完全操作权限,当然如果出现设置错误就另当别论了。
    另一个账号就是IIS来宾账号,它是网络上访问Web的账号,它不能对文件进行操作的,请检查一下这两个账号。
    所以:如果你要修改文件,请一定用IIS进程账号。