本文實例講述了C#通過指針讀取文件的方法。分享給大家供大家參考。具體如下:
// readfile.cs// 編譯時使用:/unsafe// 參數:readfile.txt// 使用該程序讀并顯示文本文件。using System;using System.Runtime.InteropServices;using System.Text;class FileReader{  const uint GENERIC_READ = 0x80000000;  const uint OPEN_EXISTING = 3;  IntPtr handle;  [DllImport("kernel32", SetLastError=true)]  static extern unsafe IntPtr CreateFile(    string FileName,        // 文件名    uint DesiredAccess,        // 訪問模式    uint ShareMode,          // 共享模式    uint SecurityAttributes,    // 安全屬性    uint CreationDisposition,    // 如何創建    uint FlagsAndAttributes,    // 文件屬性    int hTemplateFile        // 模板文件的句柄    );  [DllImport("kernel32", SetLastError=true)]  static extern unsafe bool ReadFile(    IntPtr hFile,          // 文件句柄    void* pBuffer,        // 數據緩沖區    int NumberOfBytesToRead,  // 要讀取的字節數    int* pNumberOfBytesRead,    // 已讀取的字節數    int Overlapped        // 重疊緩沖區    );  [DllImport("kernel32", SetLastError=true)]  static extern unsafe bool CloseHandle(    IntPtr hObject // 對象句柄    );  public bool Open(string FileName)  {    // 打開現有文件進行讀取    handle = CreateFile(      FileName,      GENERIC_READ,      0,       0,       OPEN_EXISTING,      0,      0);    if (handle != IntPtr.Zero)      return true;    else      return false;  }  public unsafe int Read(byte[] buffer, int index, int count)   {    int n = 0;    fixed (byte* p = buffer)     {      if (!ReadFile(handle, p + index, count, &n, 0))        return 0;    }    return n;  }  public bool Close()  {    // 關閉文件句柄    return CloseHandle(handle);  }}class Test{  public static int Main(string[] args)  {    if (args.Length != 1)    {      Console.WriteLine("Usage : ReadFile <FileName>");      return 1;    }    if (! System.IO.File.Exists(args[0]))    {      Console.WriteLine("File " + args[0] + " not found.");       return 1;    }    byte[] buffer = new byte[128];    FileReader fr = new FileReader();    if (fr.Open(args[0]))    {      // 假定正在讀取 ASCII 文件      ASCIIEncoding Encoding = new ASCIIEncoding();      int bytesRead;      do       {        bytesRead = fr.Read(buffer, 0, buffer.Length);        string content = Encoding.GetString(buffer,0,bytesRead);        Console.Write("{0}", content);      }      while ( bytesRead > 0);      fr.Close();      return 0;    }    else    {      Console.WriteLine("Failed to open requested file");      return 1;    }  }}希望本文所述對大家的C#程序設計有所幫助。
新聞熱點
疑難解答