diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs
index f6ce2a47..b567e131 100644
--- a/src/Generator/Driver.cs
+++ b/src/Generator/Driver.cs
@@ -343,7 +343,8 @@ namespace CppSharp
                     Diagnostics.Message("Generated '{0}'", fileRelativePath);
 
                     var file = Path.Combine(outputPath, fileRelativePath);
-                    File.WriteAllText(file, template.Generate());
+                    using (var streamWriter = new StreamWriter(file))
+                        template.Generate(streamWriter);
                     Options.CodeFiles.Add(file);
                 }
             }
diff --git a/src/Generator/Generators/Template.cs b/src/Generator/Generators/Template.cs
index 6dcf2caa..d8a1b2b4 100644
--- a/src/Generator/Generators/Template.cs
+++ b/src/Generator/Generators/Template.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using CppSharp.AST;
@@ -265,9 +266,9 @@ namespace CppSharp.Generators
 
         public abstract void Process();
 
-        public string Generate()
+        public virtual void Generate(TextWriter textWriter)
         {
-            return RootBlock.Generate(Options);
+            textWriter.Write(RootBlock.Generate(Options));
         }
 
         #region Block helpers