好吧,首先是我的代码:
protected void Button2_Click1(object sender, EventArgs e)
{
string batname = edit.SelectedValue;
StreamWriter sw = new StreamWriter("D:\\MPSite-Serv\\bats\\" + batname);
string theedit = batedit.Text;
sw.WriteLine(theedit);
sw.Flush();
}
当我点击button2
并尝试将所有文本写入bat文件时,我得到此结果 bat文件包含:
System.Web.UI.WebControls.TextBox
为什么?
我正在使用以下所有陈述,如果有帮助的话:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Diagnostics;
答案 0 :(得分:3)
您正在获取文本框的类型名称,这使我相信您的代码看起来像:
sw.WriteLine(batedit);
即。您正在发送文本框对象本身以写入文件而不是其Text
属性的内容。这将隐式调用ToString
方法,该方法默认返回对象的类型名称。
此外,您没有正确关闭StreamWriter
,这可能会在您想要使用时导致问题。您应该调用Close
方法,并且在关闭Flush
之前不必致电StreamWriter
。或者,您可以将StreamWriter
放在using
块中,该块会自动处理它,这将关闭它。
答案 1 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.io.streamwriter.aspx#Y2863
问题很简单:sw.writeline需要一个字符串。你正在发送一个文本对象,它变成了前面提到的.ToString();这意味着你的行被松散地翻译成
sw.WriteLine(theedit.ToString());
如果您查看WebControls.TextBox的文档...向下滚动列表到方法ToString()
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.aspx
你需要做的是......一次给它一个字符串(虽然我假设你可以从文本框中给它原始字符串):
using System.IO;
namespace String_Writer
{
class Program
{
static void Main(string[] args)
{
string batname = "test.txt";
string theedit = "Testing one two three four\n\nfive six seven eight.";
using(StreamWriter sw = File.CreateText("C:\\Users\\Kriis\\Desktop\\" + batname))
{
using (StringReader reader = new StringReader(theedit))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if (line != null)
{
sw.WriteLine(line);
}
} while (line != null);
}
}
}
}
}