常用Win32Api调用............

win32api 在使用起来威力很大,可惜用起来不太方便,

我封装几个,请各位测试一下:是否有误

using System;
using System.Runtime.InteropServices ;
using HANDLE = System.IntPtr;
using HWND = System.IntPtr;
using HFILE=System.IntPtr;
using DWORD=System.UInt32
using LPCTSTR=System.String ;
using LPTSTR=System.String ;
using LPSTR=System.String ;
using BOOL=System.Int32 ;
using UINT=System.UInt32 ;

namespace WinApi
{
 /// <summary>
 /// Win32Api文件处理
 /// </summary>
 public sealed class Win32Api_File
 {
  public const  uint MAX_PATH=256;
  public const  int TRUE=1;
  public const  int FALSE=0;
  #region 指定文件的标志
 public const int   FILE_FLAG_WRITE_THROUGH =  unchecked((int)0x80000000);
 public const int   FILE_FLAG_NO_BUFFERING  = unchecked((int)0x20000000);
 public const int   FILE_FLAG_RANDOM_ACCESS   =unchecked((int)0x10000000);
 public const int   FILE_FLAG_SEQUENTIAL_SCAN =unchecked((int)0x08000000);
 public const int   FILE_FLAG_DELETE_ON_CLOSE =unchecked((int) 0x04000000);
 public const int   FILE_FLAG_BACKUP_SEMANTICS   = unchecked((int) 0x02000000);
 public const int   FILE_FLAG_POSIX_SEMANTICS    = unchecked((int) 0x01000000);
 public const int   FILE_FLAG_OPEN_REPARSE_POINT = unchecked((int) 0x00200000);
 public const int   FILE_FLAG_OPEN_NO_RECALL     = unchecked((int) 0x00100000);
 public const int   FILE_FLAG_FIRST_PIPE_INSTANCE= unchecked((int) 0x00080000);
 public const int   FILE_FLAG_OVERLAPPED =unchecked((int) 0x40000000);//通过结构变量来保存和设置文件
  #endregion
  #region 指定文件的属性
 public const int   FILE_ATTRIBUTE_ARCHIVE =unchecked((int) 0x20);//归档
 public const int   FILE_ATTRIBUTE_COMPRESSED =unchecked((int) 0x800);//
 public const int   FILE_ATTRIBUTE_DIRECTORY = unchecked((int)0x10);//目录
 public const int   FILE_ATTRIBUTE_HIDDEN = unchecked((int)0x2);//隐藏
 public const int   FILE_ATTRIBUTE_NORMAL = unchecked((int)0x80);//正常
 public const int   FILE_ATTRIBUTE_READONLY =unchecked((int) 0x1);//只读
 public const int   FILE_ATTRIBUTE_SYSTEM = unchecked((int)0x4);//系统文件
 public const int   FILE_ATTRIBUTE_TEMPORARY = unchecked((int)0x100);//临时存储文件

  #endregion
 public const int   INVALID_HANDLE_VALUE =-1;
 public const int   INVALID_FILE_SIZE=unchecked((int)0xFFFFFFFF);
 public const int   INVALID_SET_FILE_POINTER =-1;
 public const int   INVALID_FILE_ATTRIBUTES =-1;
 public const int   File_Begin   =     0;
 public const int   File_Current  =       1;
 public const int   File_End    =       2;
  #region  指定文件的创建方式
 public const int   CREATE_NEW      =    1;
 public const int   CREATE_ALWAYS   =    2;
 public const int   OPEN_EXISTING   =    3;
 public const int   OPEN_ALWAYS     =    4;
 public const int   TRUNCATE_EXISTING =  5;
  #endregion
  #region  指定文件的存取模式
 public const int   GENERIC=0;
 public const int   GENERIC_READ=1;
 public const int   GENERIC_WRITE=2;
  #endregion
  #region  指定文件的共享模式
  public const int   File_Share_No=0;
  public const int   File_Share_Delete=0x3;
  public const int   File_Share_Read=0x1;
  public const int   File_Share_Write=0x2;
  #endregion
  public struct OVERLAPPED
  {
   public int Internal;
   public int InternalHigh;
   public int offset;
   public int OffsetHigh;
   public HANDLE hEvent;
  }

  /// <summary>
  /// 指定文件的安全属性
  /// </summary>
        public struct SECURITY_ATTRIBUTES
         {
   public int nLength;
   public int lpSecurityDescriptor;
   public int bInheritHandle;
          }
  /// <summary>
  /// Create A New File
  /// </summary>
  /// <param name="lpFileName">FileName :end with NULL</param>
  /// <param name="dwDesiredAccess">Access Mode</param>
  /// <param name="dwShareMode">Share  Mode</param>
  /// <param name="lpSec">文件安全属性</param>
  /// <param name="dwCreationDisposition">Creat Mode</param>
  /// <param name="dwFlagsAndAttributes">其值为=Flags|Attributes</param>
  /// <param name="hTemplateFile">临时文件句柄可以为NULL</param>
  /// <returns></returns>
 [DllImport("Kernel32.dll") ]
     public extern static  System.IntPtr CreateFile(
   string lpFileName,
   System.UInt32 dwDesiredAccess,
   System.UInt32 dwShareMode,
   ref SECURITY_ATTRIBUTES lpSec,
   System.UInt32 dwCreationDisposition,
   System.UInt32 dwFlagsAndAttributes,
   System.IntPtr hTemplateFile
   );
  /// <summary>
  /// 创建一个临时文件
  /// </summary>
  /// <param name="lpPathName">以NULL结尾的目录路径名</param>
  /// <param name="lpPrefixString">临时文件名的前缀字符串(以NULL结尾)</param>
  /// <param name="uUnique">为0时将返回一个唯一的整数</param>
  /// <param name="lpTempFileName">接受临时文件名的缓冲区</param>
  /// <returns></returns>
  [DllImport("Kernel32.dll") ]
   public extern static   uint   GetTempFileName(
        string lpPathName,
    
        string  lpPrefixString ,
        uint   uUnique,
        ref  string  lpTempFileName);
  /// <summary>
  /// 为一个已打开的文件设置文件指针
  /// </summary>
  /// <param name="hFile">已经打开的文件名柄</param>
  /// <param name="lDistanceToMove">文件指针要移动的byte数</param>
  /// <param name="lpDistanceToMoveHigh">。。</param>
  /// <param name="dwMoveMethod">移动方式:File_Begin,File_End,File_Current</param>
  /// <returns></returns>
[DllImport("Kernel32.dll") ]
  public extern  static  uint SetFilePointer(
   HANDLE hFile,
   int    lDistanceToMove,//number of bytes to move file pointer
   ref int lpDistanceToMoveHigh, //point to high_order dword of distance to move
   int dwMoveMethod//how to move
   );

  /// <summary>
  /// Write Data to  File
  /// </summary>
  /// <param name="hFile">OpenFile返回 的文件句柄</param>
  /// <param name="lpBuffer">要写入文件的数据地址</param>
  /// <param name="nNumberOfBytesToWrite">写入多少字节</param>
  /// <param name="lpNumberOfBytesWritten">返回本次调用成功写入的字节数</param>
  /// <param name="lpOverlapped"></param>
  /// <returns></returns>
            [DllImport("Kernel32.dll") ]
   public static extern int WriteFile(HANDLE hFile,
    IntPtr lpBuffer,
    int nNumberOfBytesToWrite,
    ref int lpNumberOfBytesWritten,
    ref OVERLAPPED lpOverlapped);
  /// <summary>
  /// 文件异步读写的回调方法 dwErrorCode==0,则I/O顺利完成
  /// </summary>
         public delegate  void   FileIOCompletionRoutine(uint dwErrorCode,
      uint  lwNumberOfBytesTrancsfer,
      ref OVERLAPPED lpOverlapped);
   [DllImport("kernel32")]
  public static extern int WriteFileEx(HANDLE hFile,
    IntPtr lpBuffer,
    int nNumberOfBytesToWrite,
    ref OVERLAPPED lpOverlapped,
    FileIOCompletionRoutine lpCompletionRoutine);
  [DllImport("kernel32")]
  public static extern int ReadFile(HANDLE hFile,
   IntPtr lpBuffer,
   int nNumberOfBytesToRead,
   ref int lpNumberOfBytesRead,
   ref OVERLAPPED lpOverlapped);
  [DllImport("kernel32")]
  public static extern int ReadFileEx(HANDLE hFile,
   IntPtr lpBuffer,
   int nNumberOfBytesToRead,
   ref OVERLAPPED lpOverlapped,
   FileIOCompletionRoutine lpCompletionRoutine);
  [DllImport("kernel32")]
  public static extern int CopyFile(string lpExistingFileName, string lpNewFileName, int bFailIfExists);
  public delegate uint  CopyProgressRoutine(long totalFileSize,
   long  totalBytesTransfer,
   long  streamSize,
   long  streamBytesTransfered,
   uint  dwStreamNumber,
   uint  dwCallbackReason,
   HANDLE hSourceFile,
   HANDLE hDestinationFile,
   System.IntPtr lpData);
  [DllImport("kernel32")]
  public static extern int  CopyFileEx(string lpExistingFileName,
   string  lpNewFileName,
   CopyProgressRoutine lpPrgRoutine,
   System.IntPtr lpData,
   ref int pbCancel,
   uint  dwCopyFlag);
  [DllImport("kernel32")]
  public static extern int MoveFile(string lpExistingFileName, string lpNewFileName);
  [DllImport("kernel32")]
  public static extern int MoveFileEx(string lpExistingFileName, string lpNewFileName, uint dwFlags);
  [DllImport("kernel32")] public static extern int DeleteFile(string lpFileName);
  [DllImport("kernel32")] public static extern int CloseHandle(HANDLE hFile);
  [DllImport("kernel32")] public static extern uint GetFileSize(HANDLE hFile, ref uint lpFileSizeHigh);
  public const int FILE_TYPE_CHAR = 0x2;
  public const int FILE_TYPE_DISK = 0x1;
  public const int FILE_TYPE_PIPE = 0x3;
  public const int FILE_TYPE_REMOTE = 0x8000;
  public const int FILE_TYPE_UNKNOWN = 0x0;
  /// <summary>
  /// 得到文件类型
  /// </summary>
  /// <param name="hFile"></param>
  /// <returns>返回以下之一: FILE_TYPE_CHAR = 0x2;
     ///   FILE_TYPE_DISK = 0x1;
  ///   FILE_TYPE_PIPE = 0x3;
     ///     FILE_TYPE_REMOTE = 0x8000;
     ///    FILE_TYPE_UNKNOWN = 0x0;</returns>
  [DllImport("kernel32")] public static extern uint GetFileType(HANDLE hFile);
  public struct FILETIME
  {
   uint dwLowDateTime;
   uint  dwHighDateTime;
  }
  [DllImport("kernel32")] public static extern int SetFileTime(HANDLE hFile, ref FILETIME lpCreationTime, ref FILETIME lpLastAccessTime, ref FILETIME lpLastWriteTime);
  [DllImport("kernel32")] public static extern int GetFileTime(HANDLE hFile, ref FILETIME lpCreationTime, ref FILETIME lpLastAccessTime, ref FILETIME lpLastWriteTime);
  #region 文件格式执行类型
  public const int SCROLLLOCK_ON = 0x40;
  public const int SCS_32BIT_BINARY = 0;
  public const int SCS_DOS_BINARY = 1;
  public const int SCS_OS216_BINARY = 5;
  public const int SCS_PIF_BINARY = 3;
  public const int SCS_POSIX_BINARY = 4;
  public const int SCS_WOW_BINARY = 2;
  #endregion
  [DllImport("kernel32")] public static extern int GetBinaryType(string lpAppName,
   ref uint  lpBinaryType);
  [DllImport("kernel32")]
  public static extern  DWORD GetFullPathName(
     LPCSTR lpFileName,
        DWORD nBufferLength,
        out  LPSTR lpBuffer,
        out  LPSTR lpFilePart);
  [DllImport("kernel32")] public static extern int GetShortPathName(string lpszLongPath, string lpszShortPath, uint cchBuffer);
  public struct BY_HANDLE_FILE_INFORMATION
  {
  uint  dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  uint  dwVolumeSerialNumber;
  uint  nFileSizeHigh;
  uint  nFileSizeLow;
  uint  nNumberOfLinks;
  uint  nFileIndexHigh;
  uint  nFileIndexLow;
 }
  [DllImport("kernel32")]
  public static extern  BOOL  GetFileInformationByHandle(
    HANDLE hFile,
    out BY_HANDLE_FILE_INFORMATION lpFileInformation );
  [DllImport("kernel32")]
  public static  extern BOOL  SetEndOfFile(HANDLE file);
  [DllImport("kernel32")]
  public static  extern BOOL  SetFileAttribute(
   LPCTSTR lpFileName,
   DWORD   dwFileAttribute);
  /// <summary>
  /// 返回文件的属性
  /// </summary>
  /// <param name="lpFileName"></param>
  /// <returns>如果返回0xFFFFFFFF返回失败</returns>
  [DllImport("kernel32")]
  public static  extern  DWORD  GetFileAttribute(
   LPCTSTR lpFileName);
  [DllImport("kernel32")]
  public static  extern  BOOL CreateDirectoryA(
     LPCSTR lpPathName,
            ref SECURITY_ATTRIBUTES lpSecurityAttributes);
  [DllImport("kernel32")]
  public static  extern  BOOL CreateDirectoryA(
   LPCSTR lpTemplateName,
   LPCSTR lpNewDirectory,
   ref SECURITY_ATTRIBUTES lpSecurityAttributes
   );
  [DllImport("kernel32")]
  public static  extern  BOOL RemoveDirectory( LPCSTR lpPathName);
  [DllImport("kernel32")]
  public static  extern  UINT GetSystemDirectory(out LPTSTR lpBuffer,  UINT uSize);
  [DllImport("kernel32")]
  public static  extern  DWORD GetTempPath( DWORD nBufferLength,out LPSTR lpBuffer );
  [DllImport("kernel32")]
  public static  extern  UINT GetWindowsDirectory(out  LPSTR lpBuffer, UINT uSize);
  [DllImport("kernel32")]
  public static extern     BOOL   SetCurrentDirectory(LPCTSTR lpPathName);
  [DllImport("kernel32")]
  public static extern DWORD  GetCurrentDirectory(int nBufferLength, LPTSTR lpBuffer);
  public struct WIN32_FIND_DATA
  {
   public int dwFileAttributes;
   public FILETIME ftCreationTime;
   public FILETIME ftLastAccessTime;
   public FILETIME ftLastWriteTime;
   public int nFileSizeHigh;
   public int nFileSizeLow;
   public int dwReserved0;
   public int dwReserved1;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst=Win32Api_File.MAX_PATH )]
   public string cFileName;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
   public string cAlternate;
  }
  [DllImport("kernel32")]
  public static extern  HANDLE FindFirstFile(LPCTSTR lpFileName,ref WIN32_FIND_DATA lpFindFileData);
  [DllImport("kernel32")]
  public static extern  BOOL  FindNextFile(HANDLE hFindFile,ref WIN32_FIND_DATA lpFindFileData);
  [DllImport("kernel32")]
  public static extern DWORD SearchPath(LPCTSTR lpPath,
      LPCTSTR lpFileName,
      LPCTSTR lpExtension,
      DWORD nBufferLength,
      LPTSTR  lpBuffer,
      ref LPTSTR  lpFilePart);
  [DllImport("kernel32")]
  public static extern  BOOL  FindClose(HANDLE hFindFile);
  [DllImport("kernel32")]
  public static extern BOOL  GetDiskFreeSpace(
     LPCTSTR lpRootPathName,
     ref DWORD lpSectorsPerCluster,
     ref DWORD lpbytesPerSector,
     ref DWORD lpNumberOfFreeClusters,
     ref DWORD lpTotalNumberOfCluster);
  [DllImport("kernel32")]
  public static extern BOOL  GetDiskFreeSpaceEx(
     LPCTSTR lpDirectoryName,
     ref long  lpFreeBytesAalToCaller,
     ref long  lpTotalNumberOfBytes,
     ref long  lpTotalNumberOfFreeBytes);
public const  int DRIVE_UNKNOWN =    0;
public const  int DRIVE_NO_ROOT_DIR= 1;
public const  int DRIVE_REMOVABLE =  2;
public const  int DRIVE_FIXED   =    3;
public const  int DRIVE_REMOTE   =   4;
public const  int DRIVE_CDROM     =  5;
public const  int DRIVE_RAMDISK   =  6;
  /// <summary>
  /// 得到磁盘类型
  /// </summary>
  /// <param name="lpRootPathName">可选参数</param>
  /// <returns>  0。。。6</returns>
  [DllImport("kernel32")]
  public static extern  UINT GetDriveType(
     LPCSTR  lpRootPathName);
 


 
 
 


 

  

  

 

 

 
                                                   
  private Win32Api_File()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
 }
}


 

posted on 2004-07-15 16:53  老代哥哥  阅读(485)  评论(0编辑  收藏  举报

导航