常用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: 在此处添加构造函数逻辑
//
}
}
}