我正在尝试创建一个文件并保存文本,但它只是创建文件,任何人都可以建议问题是什么?
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Text File|*.txt";
sfd.FileName = "Password";
sfd.Title = "Save Text File";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = sfd.FileName;
StreamWriter bw = new StreamWriter(File.Create(path));
bw.Write(randomstring);
bw.Dispose();
}
}
答案 0 :(得分:3)
在致电bw.Close()
之前,您需要致电bw.Dispose()
。根据API:“您必须调用Close以确保所有数据都正确写入基础流。” (http://msdn.microsoft.com/en-us/library/system.io.streamwriter.close(v=vs.110).aspx)
我实际上将代码更改为:
using (StreamWriter bw = new StreamWriter(File.Create(path)))
{
bw.Write(randomstring);
bw.Close();
}
using
阻止将自动调用Dispose()
,无论一切是否成功完成。
答案 1 :(得分:2)
尝试使用File.WriteAllText
代替
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//...
File.WriteAllText(path, randomstring);
}
答案 2 :(得分:1)
bw.Write(randomstring);
bw.Dispose();
你写东西,然后完全处理对象。尝试:
bw.Write(randomstring);
bw.Close();
bw.Dispose();
答案 3 :(得分:0)
Per the documentation,您需要在处理之前致电bw.Close()
。此外,您应该使用using
确保所有IDisposable
都已正确处理。
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = sfd.FileName;
using (var fs = File.Create(path))
using (StreamWriter bw = new StreamWriter(fs))
{
bw.Write(randomstring);
bw.Close();
}
}
或者只使用File.WriteAllText
:
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string path = sfd.FileName;
File.WriteAllText(path, randomstring);
}