柳暗花明又一村 - C#中对文件进行的操作

    今天的工作就是动态生成一个文件,根据用户设置的不同,生成的文件也不同。其实要生成的文件是一个文本文件,文本内容是.aspx.cs的代码。
    已经为文件写好了一个范例,并且把一些需用户设置的值当作变量,放在了需要更改的区域,用户修改之后,只需要把这些变量的值更改一下即可。
      
    范例代码剪切:
   
        protected System.Web.UI.WebControls.Button BTSearch;
        
protected System.Web.UI.WebControls.TextBox TBSearch;
        
protected System.Web.UI.WebControls.DropDownList Community;

        
//以下就是需更改的区域
        
//--Begin--
        protected string pageid="10";
        
protected string tablename="LJF";
        
protected ArrayList al=new ArrayList();

        
protected void SetArrayList()
        
{
            al.Clear();
            al.Add(
"居委会名称");
            al.Add(
"垃圾房位置");
        }

        
//--End--

        
protected void CheckDelete(object sender,System.EventArgs e)
        
{
            ((LinkButton)sender).Attributes.Add(
"onclick","return IsDelete();");
        }

需更改的地方,以//--Begin开始,以//--End--结束。

但是,很麻烦,找帮助找了几个小时,发现在C#中StreamWriter类,FileStream类好像只支持简单的对文件进行写入,读出工作。要把中间那一段需修改的字符串抽取出来,修改后,再保存回该文件,我没办到!

后来,找到了一个解决办法,就是,把文件全部读出来,放到String对象中去,String类中对字符串的操作可强多了。以下是解决的代码:
            string path=@"D:\browser.aspx.cs";
            StreamReader sr 
= new StreamReader(path,Encoding.Default); //把文件读到流中
            string allstr = sr.ReadToEnd(); //文件中的内容放入String对象allstr中
            sr.Close();

            
//下面先把文件分割出来,然后填入相应的设置的变量进去,最后进行整合。
            
//剥离文件--头部分
            int begin=allstr.IndexOf("//--Begin--")+11;
            
string strBegin = allstr.Substring(0,begin);
            
            
//剥离文件--尾部分
            int end = allstr.IndexOf("//--End--");
            
string strEnd = allstr.Remove(0,end);
            
            
//设置后缀代码中需修改变量的值
            string strmodify="protected string pageid=\""+spageid+"\";\n";
            strmodify
=strmodify+"protected string tablename=\""+stablename+"\";\n";
            strmodify
=strmodify+"protected ArrayList al=new ArrayList();\n";
            strmodify
=strmodify+"protected void SetArrayList()\n";
            strmodify
=strmodify+"{ al.Clear();\n";

            
string strmodify2="";
            
for(int i=0;i<sserach.Count;i++)
            
{
                strmodify2
=strmodify2+"al.Add(\""+sserach[i].ToString()+"\");\n";
            }

            
            strmodify
=strmodify+strmodify2;

            strmodify
=strmodify+"}\n";

            
//再把修改后的文件保存
            
            StreamWriter sw 
= File.CreateText(sfolder+"\browser.aspx.cs");
            sw.Write(strBegin
+strmodify+strEnd); //头部分+修改后的文本+尾部分=修改后的代码
            sw.Close();


至此,棘手的问题解决,Happy~~~
posted @ 2005-05-19 16:08  shipfi  阅读(368)  评论(0编辑  收藏