程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#經由過程指針讀取文件的辦法

C#經由過程指針讀取文件的辦法

編輯:C#入門知識

C#經由過程指針讀取文件的辦法。本站提示廣大學習愛好者:(C#經由過程指針讀取文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#經由過程指針讀取文件的辦法正文


本文實例講述了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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved