C# 使用Velocity/NVelocity完全覆盖文件
我试图在.Net应用程序中使用NVelocity模板:使用模板将结果输出到文件。除了输出永远不会被完全覆盖之外,这一切似乎都很好。如果我的文件长度为100个字符,模板仅呈现20个字符,则最后80个字符永远不会更改 代码示例: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
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方法来截断它。
要使其工作,流必须是可写和可查找的