C# 使用Velocity/NVelocity完全覆盖文件

C# 使用Velocity/NVelocity完全覆盖文件,c#,filestream,velocity,nvelocity,C#,Filestream,Velocity,Nvelocity,我试图在.Net应用程序中使用NVelocity模板:使用模板将结果输出到文件。除了输出永远不会被完全覆盖之外,这一切似乎都很好。如果我的文件长度为100个字符,模板仅呈现20个字符,则最后80个字符永远不会更改 代码示例: FileStream fileStream = new FileStream(outputPath, FileMode.OpenOrCreate, FileAccess.Write); using (StreamWriter streamW

我试图在.Net应用程序中使用NVelocity模板:使用模板将结果输出到文件。除了输出永远不会被完全覆盖之外,这一切似乎都很好。如果我的文件长度为100个字符,模板仅呈现20个字符,则最后80个字符永远不会更改

代码示例:

        FileStream fileStream = new FileStream(outputPath, FileMode.OpenOrCreate, FileAccess.Write);

        using (StreamWriter streamWriter = new StreamWriter(fileStream))
        {
            velocityEngine.MergeTemplate(templateName, Encoding.Default.WebName, velocityContext, streamWriter);
        }
因此,如果我的模板输出AAAA,并且文件已经包含BBBBBBBB,那么在最后,文件在op的末尾包含AAAABBBB

有什么线索可以让它完全覆盖文件吗?-e、 g.在上述示例中,最终输出应为AAAA。不太确定这是否只是纯流相关的东西——但我以前在使用filestreams时没有遇到过这个问题

很高兴编写一个重置方法,或者只是输出到memorystream并覆盖文件,但如果可能的话,我希望它能像这样工作! **编辑:''通过调用

 fileStream.SetLength(0);

当我打开文件时。但是如果有更好的方法,我会很感激的

我认为解决方案是将
FileMode.OpenOrCreate
更改为简单的
FileMode.Create

从MSDN上的文章

文件模式。创建 指定操作系统应创建新文件。如果文件已存在,则将覆盖该文件

文件模式。打开或创建 指定操作系统应打开文件(如果存在);否则,应创建一个新文件


如果您在打开时不知道可能正在截断文件,可以使用流上的SetLength方法来截断它。

要使其工作,流必须是可写和可查找的