//Code revised from Chapter 25 - Accessing Data Streams
//C# Bible
//by Jeff Ferguson et al.
using System;
using System.IO;
using System.Threading;
class FileTestClass
{
private static FileStream BinaryFile = new FileStream("test.dat", FileMode.Create, FileAccess.ReadWrite);
private static byte [] ByteArray = new byte [256];
private static IAsyncResult AsyncReadResultImplementation = null;
private static IAsyncResult AsyncWriteResultImplementation;
private static AsyncCallback ReadBytesCompleteCallback = new AsyncCallback(OnReadBytesComplete);
private static AsyncCallback WriteBytesCompleteCallback = new AsyncCallback(OnWriteBytesComplete);
public static void OnReadBytesComplete(IAsyncResult AsyncResult)
{
int BytesRead;
int Failures;
BytesRead = BinaryFile.EndRead(AsyncResult);
Console.WriteLine("Bytes read........: {0}", BytesRead);
Failures = 0;
for(int i = 0; i < 256; i++)
{
if(ByteArray[i] != (byte)i)
{
Console.WriteLine("Read test failed for byte at offset {0}.", i);
Failures++;
}
}
Console.WriteLine("Read test failures: {0}", Failures);
}
public static void OnWriteBytesComplete(IAsyncResult AsyncResult)
{
BinaryFile.EndWrite(AsyncResult);
}
static public void Main()
{
for(int i = 0; i < 256; i++)
ByteArray[i] = (byte)i;
AsyncWriteResultImplementation = BinaryFile.BeginWrite(ByteArray, 0, 256, WriteBytesCompleteCallback, null);
WaitHandle WaitOnWriteIO = AsyncWriteResultImplementation.AsyncWaitHandle;
WaitOnWriteIO.WaitOne();
BinaryFile.Seek(0, SeekOrigin.Begin);
AsyncReadResultImplementation = BinaryFile.BeginRead(ByteArray, 0, 256, ReadBytesCompleteCallback, null);
WaitHandle WaitOnReadIO = AsyncReadResultImplementation.AsyncWaitHandle;
WaitOnReadIO.WaitOne();
}
}