2002-05-05 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / corlib / System.IO / StreamWriter.cs
1 //\r
2 // System.IO.StreamWriter.cs\r
3 //\r
4 // Author:\r
5 //   Dietmar Maurer (dietmar@ximian.com)\r
6 //\r
7 // (C) Ximian, Inc.  http://www.ximian.com\r
8 //\r
9 \r
10 using System.Text;\r
11 \r
12 namespace System.IO {\r
13         \r
14                 [Serializable]\r
15         public class StreamWriter : TextWriter {\r
16 \r
17                 private Encoding internalEncoding;\r
18 \r
19                 private Stream internalStream;\r
20 \r
21                 private bool iflush;\r
22                 \r
23                 // new public static readonly StreamWriter Null;\r
24 \r
25                 public StreamWriter (Stream stream)\r
26                         : this (stream, null, 0) {}\r
27 \r
28                 public StreamWriter (Stream stream, Encoding encoding)\r
29                         : this (stream, encoding, 0) {}\r
30 \r
31                 public StreamWriter (Stream stream, Encoding encoding, int bufferSize)\r
32                 {\r
33                         internalStream = stream;\r
34 \r
35                         if (encoding == null)\r
36                                 internalEncoding = Encoding.UTF8;\r
37                         else\r
38                                 internalEncoding = encoding;\r
39                 }\r
40 \r
41                 public StreamWriter (string path)\r
42                         : this (path, false, null, 0) {}\r
43 \r
44                 public StreamWriter (string path, bool append)\r
45                         : this (path, append, null, 0) {}\r
46 \r
47                 public StreamWriter (string path, bool append, Encoding encoding)\r
48                         : this (path, append, encoding, 0) {}\r
49                 \r
50                 public StreamWriter (string path, bool append, Encoding encoding, int bufferSize)\r
51                 {\r
52                         FileMode mode;\r
53 \r
54                         if (append)\r
55                                 mode = FileMode.Append;\r
56                         else\r
57                                 mode = FileMode.Create;\r
58                         \r
59                         internalStream = new FileStream (path, mode, FileAccess.Write);\r
60 \r
61                         if (append)\r
62                                 internalStream.Position = internalStream.Length;\r
63                         else\r
64                                 internalStream.SetLength (0);\r
65 \r
66                         if (encoding == null)\r
67                                 internalEncoding = Encoding.UTF8;\r
68                         else\r
69                                 internalEncoding = encoding;\r
70                         \r
71                 }\r
72 \r
73                 public virtual bool AutoFlush\r
74                 {\r
75 \r
76                         get {\r
77                                 return iflush;\r
78                         }\r
79 \r
80                         set {\r
81                                 iflush = value;\r
82                         }\r
83                 }\r
84 \r
85                 public virtual Stream BaseStream\r
86                 {\r
87                         get {\r
88                                 return internalStream;\r
89                         }\r
90                 }\r
91 \r
92                 public override Encoding Encoding\r
93                 {\r
94                         get {\r
95                                 return internalEncoding;\r
96                         }\r
97                 }\r
98 \r
99                 protected override void Dispose (bool disposing)\r
100                 {\r
101                         if (disposing && internalStream != null) {\r
102                                 internalStream.Close ();\r
103                                 internalStream = null;\r
104                         }\r
105                 }\r
106 \r
107                 public override void Flush ()\r
108                 {\r
109                         internalStream.Flush ();\r
110                 }\r
111                 \r
112                 public override void Write (char[] buffer, int index, int count)\r
113                 {\r
114                         byte[] res = new byte [internalEncoding.GetMaxByteCount (buffer.Length)];\r
115                         int len;\r
116 \r
117                         len = internalEncoding.GetBytes (buffer, index, count, res, 0);\r
118 \r
119                         internalStream.Write (res, 0, len);\r
120 \r
121                         if (iflush)\r
122                                 Flush ();\r
123                         \r
124                 }\r
125 \r
126                 public override void Write(string value)\r
127                 {\r
128                         Write (value.ToCharArray (), 0, value.Length);\r
129                 }\r
130 \r
131                          \r
132         }\r
133 }\r
134                         \r
135                         \r