2 // System.IO/FileStream.cs
5 // Dietmar Maurer (dietmar@ximian.com)
7 // (C) 2001 Ximian, Inc. http://www.ximian.com
11 using System.Runtime.InteropServices;
12 using System.Threading;
14 // fixme: I do not know how to handle errno when calling PInvoke functions
15 // fixme: emit the correct exceptions everywhere
20 public class FileStream : Stream
22 private OpSys _os = Platform.OS;
23 private IntPtr fdhandle;
24 private FileAccess acc;
27 public FileStream (IntPtr handle, FileAccess access)
28 : this (handle, access, true, 0, false) {}
30 public FileStream (IntPtr handle, FileAccess access, bool ownsHandle)
31 : this (handle, access, ownsHandle, 0, false) {}
33 public FileStream (IntPtr handle, FileAccess access, bool ownsHandle, int bufferSize)
34 : this (handle, access, ownsHandle, bufferSize, false) {}
36 public FileStream (IntPtr handle, FileAccess access, bool ownsHandle,
37 int bufferSize, bool isAsync)
45 public FileStream (string name, FileMode mode)
46 : this (name, mode, FileAccess.ReadWrite, FileShare.ReadWrite, 0, false) {}
48 public FileStream (string name, FileMode mode, FileAccess access)
49 : this (name, mode, access, FileShare.ReadWrite, 0, false) {}
51 public FileStream (string name, FileMode mode, FileAccess access, FileShare share)
52 : this (name, mode, access, share, 0, false) {}
54 public FileStream (string name, FileMode mode, FileAccess access,
55 FileShare share, int buferSize)
56 : this (name, mode, access, share, 0, false) {}
58 // fixme: implement all share, buffer, async
59 public FileStream (string name, FileMode mode, FileAccess access, FileShare share,
60 int buferSize, bool useAsync)
62 fdhandle = _os.OpenFile (name, mode, access, share);
64 /* Implement error checking, with some sort of access
65 to the errno error reason
66 if(fdhandle == error) {
67 throw new IOException();
75 public override bool CanRead
80 case FileAccess.ReadWrite:
82 case FileAccess.Write:
89 public override bool CanSeek
92 // fixme: not alway true
97 public override bool CanWrite
101 case FileAccess.Write:
102 case FileAccess.ReadWrite:
110 unsafe public override long Length
113 return _os.FileLength (fdhandle);
117 public override long Position
120 return _os.SeekFile (fdhandle, 0, SeekOrigin.Current);
123 _os.SeekFile (fdhandle, value, SeekOrigin.Begin);
127 public override void Flush ()
131 public override void Close ()
134 _os.CloseFile (fdhandle);
138 public unsafe override int Read (byte[] buffer,
142 return _os.ReadFile (fdhandle, buffer, offset, count);
145 public unsafe override int ReadByte ()
147 byte[] val = new byte[1];
148 int res = Read (val, 0, 1);
151 throw new IOException();
158 public override long Seek (long offset,
161 return _os.SeekFile (fdhandle, offset, origin);
164 public override void SetLength (long value)
166 _os.SetLengthFile (fdhandle, value);
169 public unsafe override void Write (byte[] buffer,
173 int res = _os.WriteFile (fdhandle, buffer, offset, count);
176 throw new IOException();
179 public unsafe override void WriteByte (byte value)
181 byte[] buf = new byte[1];
188 public virtual IntPtr Handle