result.BytesRead = -1;
result.Count = numBytes;
result.OriginalCount = numBytes;
-
+/*
if (buf_dirty) {
MemoryStream ms = new MemoryStream ();
FlushBuffer (ms);
array = ms.ToArray ();
numBytes = array.Length;
}
-
+*/
WriteDelegate w = WriteInternal;
return w.BeginInvoke (array, offset, numBytes, userCallback, stateObject);
}
return(count);
}
- void FlushBuffer (Stream st)
+ void FlushBuffer ()
{
if (buf_dirty) {
- MonoIOError error;
+// if (st == null) {
+ MonoIOError error;
- if (CanSeek == true && !isExposed) {
- MonoIO.Seek (safeHandle, buf_start, SeekOrigin.Begin, out error);
+ if (CanSeek == true && !isExposed) {
+ MonoIO.Seek (safeHandle, buf_start, SeekOrigin.Begin, out error);
- if (error != MonoIOError.ERROR_SUCCESS) {
- // don't leak the path information for isolated storage
- throw MonoIO.GetException (GetSecureFileName (name), error);
+ if (error != MonoIOError.ERROR_SUCCESS) {
+ // don't leak the path information for isolated storage
+ throw MonoIO.GetException (GetSecureFileName (name), error);
+ }
}
- }
- if (st == null) {
+
int wcount = buf_length;
int offset = 0;
while (wcount > 0){
wcount -= n;
offset += n;
}
- } else {
- st.Write (buf, 0, buf_length);
- }
+// } else {
+// st.Write (buf, 0, buf_length);
+// }
}
buf_start += buf_offset;
buf_dirty = false;
}
- private void FlushBuffer ()
- {
- FlushBuffer (null);
- }
-
private void FlushBufferIfDirty ()
{
if (buf_dirty)
- FlushBuffer (null);
+ FlushBuffer ();
}
private void RefillBuffer ()
Assert.AreEqual (new byte[] { 0 }, stream.ToArray (), "#7");
}
+ [Test]
+ public void AsynchronousModeWrites ()
+ {
+ string filename = Path.Combine (TempFolder, "myfilename");
+
+ using (var file = new FileStream (filename, FileMode.CreateNew,
+ FileAccess.Write, FileShare.Read, 4096, FileOptions.Asynchronous))
+ using (var writer = new BinaryWriter (file)) {
+ writer.Write (new byte[] { 0xCC, 0xDD } );
+ writer.Write (new byte[] { 0xAA } );
+ }
+
+ using (var inputStream = new FileStream (filename, FileMode.Open))
+ {
+ using (var reader = new BinaryReader (inputStream)) {
+ var l = reader.ReadByte ();
+ Assert.AreEqual (0xCC, l);
+
+ Assert.AreEqual (3, inputStream.Length);
+ }
+ }
+ }
+
[Test]
public void BaseStreamCallsFlush ()
{