File.Create将附加到文件而不是覆盖它

时间:2010-07-19 10:51:01

标签: c# .net asp.net file-io

对不起,但还有其他一些问题。代码现在正常工作。谢谢大家。


如果文件不存在,我有以下代码用于创建文件,如果文件已经存在则覆盖它:

FileStream fsExe = File.Create(DestExePath, 4096);
 BinaryWriter bw = new BinaryWriter(fsExe);

我写入BinaryWriter时,它会被附加到“DestExePath”而不是覆盖原始文件。

任何人都有任何想法,为什么会这样?

6 个答案:

答案 0 :(得分:4)

发生这种情况的原因是因为您永远不会关闭基础流并重复使用相同的二进制写入程序来写入当然会附加的文件。我建议您在写完文件后关闭流:

using (var stream = File.Create(DestExePath, 4096))
using (var writer = new BinaryWriter(stream))
{
    // Use the writer here to append to the file.
}

答案 1 :(得分:0)

您是否遇到过与此代码相同的行为?

using (FileStream fileStream = new FileStream(DestExePath, FileMode.Create))
{
    BinaryWriter bw = new BinaryWriter(fsExe);
}

答案 2 :(得分:0)

如果你保持bw开放,并继续写作,当然它会附加。

如果要替换文件,则必须关闭该文件,再次打开它,然后创建一个新的二进制文件。

答案 3 :(得分:0)

根据文档不应该发生这种情况:

  

“如果指定的文件不存在,则创建; 如果存在且不是只读的,则内容将被覆盖。”

来源:http://msdn.microsoft.com/en-us/library/d62kzs03.aspx

答案 4 :(得分:0)

无问题地运行此工作

Sub Main()
    Dim fsExe = File.Create("c:\test.txt", 4096)
    Dim bw = New BinaryWriter(fsExe)
    bw.Write("this is a test 123")
    fsExe.Close()
End Sub

覆盖

答案 5 :(得分:-2)

对不起,但还有其他一些问题。代码现在正常工作。谢谢大家。