C#对文件的写入一定要用.flush()方法才行么?
private void button2_Click(object sender, EventArgs e)
{
if (ofdExport.ShowDialog() != DialogResult.OK)
return;
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_MyTable1";
using (FileStream fs1 = File.OpenWrite(ofdExport.FileName))
//using(FileStream fs = new FileStream("e:\\2.txt",FileMode.OpenOrCreate,FileAccess.Write))
{
StreamWriter sWrite = new StreamWriter(fs1);
//StreamWriter sWrite = new StreamWriter("e:\\2.txt", false, System.Text.Encoding.Default);
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string name = reader.GetString(reader.GetOrdinal("Name"));
//MessageBox.Show(name);
int age = reader.GetInt32(reader.GetOrdinal("Age"));
//MessageBox.Show(age.ToString());
sWrite.WriteLine(name+"|"+age.ToString());
sWrite.Flush();
}
MessageBox.Show("OK");
}
}
}
}
}
}
}
[解决办法]
MSDN:
当使用 StreamWriter 或 BinaryWriter 类时,不要刷新 Stream 基对象。 而应使用该类的 Flush 或 Close 方法,此方法确保首先将该数据刷新至基础流,然后再将其写入文件。
[解决办法]
清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
http://msdn.microsoft.com/zh-cn/library/system.io.streamwriter.flush(v=vs.110).aspx
[解决办法]
加不加sWrete.Flush()没有关系。不用Flush相当于一次性写入所有,用了Flush,表示不等后面的,先把当前的写入。
其实根本原因是你文件流没有关闭。sWrite.Close();