关于网友提出的“ C#对文件的写入一定要用flush方法才行么?”问题疑问,本网通过在网上对“ C#对文件的写入一定要用flush方法才行么?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 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");
}
}
}
}
}
}
}
红色字体那开始没有,反正一直写不进去文件,加了sWrete.Flush()才能写进去,这是为什么呀?
解决方案1: 加不加sWrete.Flush()没有关系。不用Flush相当于一次性写入所有,用了Flush,表示不等后面的,先把当前的写入。
其实根本原因是你文件流没有关闭。sWrite.Close();
解决方案2: 清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流。
http://msdn.microsoft.com/zh-cn/library/system.io.streamwriter.flush(v=vs.110).aspx
解决方案3: MSDN:
当使用 StreamWriter 或 BinaryWriter 类时,不要刷新 Stream 基对象。 而应使用该类的 Flush 或 Close 方法,此方法确保首先将该数据刷新至基础流,然后再将其写入文件。
以上介绍了“ C#对文件的写入一定要用flush方法才行么?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1874701.html