API File reader : DllImport « Windows « C# / CSharp Tutorial






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));
            }
        }
    }








29.12.DllImport
29.12.1.DllImport: load dll library
29.12.2.DllImport
29.12.3.External Method
29.12.4.Get address of a method from Dll
29.12.5.API File reader