我使用此代码保存我的xml文件。
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.DefaultExt = ".FFDATA";
saveFileDialog1.Filter = "Form|*.FFDATA";
saveFileDialog1.FileName = "A_"+code;//here code is a generated number, always unique
Stream myStream;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
StreamWriter wText = new StreamWriter(myStream);
wText.Write(result.ToString());
myStream.Close();
}
}
然而,当我打开文件时,里面的文本会在某个地方被剪切掉,而第二部分则会丢失。 (我打破wText.Write(result.ToString());
和result.ToString()
正如我所料 - 正常文字。
然后我尝试放wText.Write("Test?");
并且没有任何内容保存到文件中,但是文件本身就出现了。
因此无论我试图保存的文本有多短,我至少都会丢失一些数据。
问题:我做错了什么?
P.S。我找到了this示例并略微修改以满足我的需求。
答案 0 :(得分:4)
内容可能没有刷新。通过自己调用Flush或使用也处理处理/关闭等的“使用”块可以很容易地避免这种情况。
using (StreamWriter wText = new StreamWriter(myStream))
{
wText.Write(result.ToString());
//wText.Flush(); //this should not be needed because close will flush
}
注意这里没有任何.Close()...通过using块处理streamreader会为你完成这个,并确保它正确完成。
答案 1 :(得分:2)
在close()之前调用StreamWriter上的flush(),这会将输出缓冲区刷新到文件。或者直接在streamwriter上调用close,这应该刷新writer并关闭底层流。如果需要,可以将AutoFlush设置为true,这可能会对性能产生影响。
答案 2 :(得分:0)
确保关闭StreamWriter wText。您正在关闭基础流,但不是正在写入文件的StreamWriter。调用StreamWriter.Close()
也会为您关闭基础流。确保使用try / finally确保在发生异常(例如IOException)时关闭流。以下代码可以解决您的问题:
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.DefaultExt = ".FFDATA";
saveFileDialog1.Filter = "Form|*.FFDATA";
saveFileDialog1.FileName = "A_"+code;//here code is a generated number, always unique
Stream myStream;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
StreamWriter wText = new StreamWriter(myStream);
try
{
wText.Write(result.ToString());
}
// Close Stream and StreamWriter in a finally block so that they are
// closed even if an exception occurs.
finally
{
// StreamWriter.Close() will close the underlying Stream for you
wText.Close();
}
}
}
答案 3 :(得分:0)
您是否尝试过这种替代方法?
File.AppendAllText(path, result.ToString())
答案 4 :(得分:0)
尝试:
StreamWriter wText = new StreamWriter(myStream);
wText.Write(result.ToString());
wText.Close();
myStream.Close();
或(更好):
using (var myStream = saveFileDialog1.OpenFile())
{
if (myStream != null)
{
using (var wText = new StreamWriter(myStream))
{
wText.Write(result.ToString());
}
}
}