2
0

StringWriter.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //
  2. // System.IO.StringWriter
  3. //
  4. // Author: Marcin Szczepanski ([email protected])
  5. //
  6. using System.Text;
  7. namespace System.IO {
  8. [Serializable]
  9. public class StringWriter : TextWriter {
  10. private StringBuilder internalString;
  11. public StringWriter() {
  12. internalString = new StringBuilder();
  13. }
  14. public StringWriter( IFormatProvider formatProvider ) {
  15. internalFormatProvider = formatProvider;
  16. }
  17. public StringWriter( StringBuilder sb ) : this (sb, null) {
  18. }
  19. public StringWriter( StringBuilder sb, IFormatProvider formatProvider ) {
  20. if (sb == null)
  21. throw new ArgumentNullException ();
  22. internalString = sb;
  23. internalFormatProvider = formatProvider;
  24. }
  25. public override System.Text.Encoding Encoding {
  26. get {
  27. return System.Text.Encoding.Unicode;
  28. }
  29. }
  30. public override void Close() {
  31. Dispose( true );
  32. }
  33. protected override void Dispose (bool disposing)
  34. {
  35. // MS.NET doesn't clear internal buffer.
  36. // internalString = null;
  37. base.Dispose (disposing);
  38. }
  39. public virtual StringBuilder GetStringBuilder() {
  40. return internalString;
  41. }
  42. public override string ToString() {
  43. return internalString.ToString();
  44. }
  45. public override void Write( char value ) {
  46. internalString.Append( value );
  47. }
  48. public override void Write( string value ) {
  49. internalString.Append( value );
  50. }
  51. public override void Write( char[] buffer, int index, int count ) {
  52. if( buffer == null ) {
  53. throw new ArgumentNullException();
  54. } else if( index < 0 || count < 0 ) {
  55. throw new ArgumentOutOfRangeException();
  56. } else if( index > buffer.Length || index + count > buffer.Length ) {
  57. throw new ArgumentException();
  58. }
  59. char[] writeBuffer = new char[ count ];
  60. Array.Copy( buffer, index, writeBuffer, 0, count );
  61. internalString.Append( writeBuffer );
  62. }
  63. }
  64. }