柳暗花明又一村 - C#中对文件进行的操作
今天的工作就是动态生成一个文件,根据用户设置的不同,生成的文件也不同。其实要生成的文件是一个文本文件,文本内容是.aspx.cs的代码。
已经为文件写好了一个范例,并且把一些需用户设置的值当作变量,放在了需要更改的区域,用户修改之后,只需要把这些变量的值更改一下即可。
范例代码剪切:
需更改的地方,以//--Begin开始,以//--End--结束。
但是,很麻烦,找帮助找了几个小时,发现在C#中StreamWriter类,FileStream类好像只支持简单的对文件进行写入,读出工作。要把中间那一段需修改的字符串抽取出来,修改后,再保存回该文件,我没办到!
后来,找到了一个解决办法,就是,把文件全部读出来,放到String对象中去,String类中对字符串的操作可强多了。以下是解决的代码:
至此,棘手的问题解决,Happy~~~
已经为文件写好了一个范例,并且把一些需用户设置的值当作变量,放在了需要更改的区域,用户修改之后,只需要把这些变量的值更改一下即可。
范例代码剪切:
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();");
}
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();
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~~~