using System;
using System.Runtime.InteropServices;
using System.Text;
class APIFileReader
{
uint GenericRead = 0x80000000;
uint OpenExisting = 3;
uint UseDefault = 0;
int fileHandle;
[DllImport("kernel32", SetLastError = true)]
static extern unsafe int CreateFile(string filename,uint desiredAccess,uint shareMode,uint attributes,uint creationDisposition,uint flagsAndAttributes,uint templateFile);
[DllImport("kernel32", SetLastError = true)]
static extern unsafe bool ReadFile(int hFile,void* lpBuffer,int nBytesToRead,int* nBytesRead,int overlapped);
public APIFileReader(string filename)
{
fileHandle = CreateFile(filename,GenericRead, UseDefault, UseDefault, OpenExisting,UseDefault, UseDefault);
}
public unsafe int Read(byte[] buffer, int index, int count)
{
int bytesRead = 0;
fixed (byte* bytePointer = buffer)
{
ReadFile(fileHandle, bytePointer + index, count, &bytesRead, 0);
}
return bytesRead;
}
}
class Test
{
public static void Main()
{
APIFileReader fileReader = new APIFileReader("data.txt");
int BuffSize = 128;
byte[] buffer = new byte[BuffSize];
ASCIIEncoding asciiEncoder = new ASCIIEncoding();
while (fileReader.Read(buffer, 0, BuffSize) != 0)
{
Console.Write("{0}", asciiEncoder.GetString(buffer));
}
}
}
|