我爱北京天安门
天安门上太阳升
伟大领袖毛主席
指引我们向前进
<p>win32api 在使用起来威力很大,可惜用起来不太方便,</p> <p>我封装几个,请各位测试一下:是否有误</p> <p>using System;<br />using System.Runtime.InteropServices ;<br />using HANDLE = System.IntPtr;<br />using HWND = System.IntPtr;<br />using HFILE=System.IntPtr;<br />using DWORD=System.UInt32 <br
/>using LPCTSTR=System.String ;<br />using LPTSTR=System.String ;<br />using LPSTR=System.String ;<br />using BOOL=System.Int32 ;<br />using UINT=System.UInt32 ;</p> <p>namespace WinApi<br />{<br /> /// <summary><br /> /// Win32Api文件处理<br /> ///
</summary><br /> public sealed class Win32Api_File<br /> {<br /> public const uint MAX_PATH=256;<br /> public const int TRUE=1;<br /> public const int FALSE=0;<br /> #region 指定文件的标志<br
/> public const int FILE_FLAG_WRITE_THROUGH = unchecked((int)0x80000000);<br /> public const int FILE_FLAG_NO_BUFFERING = unchecked((int)0x20000000);<br /> public const int FILE_FLAG_RANDOM_ACCESS
=unchecked((int)0x10000000);<br /> public const int FILE_FLAG_SEQUENTIAL_SCAN =unchecked((int)0x08000000);<br /> public const int FILE_FLAG_DELETE_ON_CLOSE =unchecked((int) 0x04000000);<br /> public const int
FILE_FLAG_BACKUP_SEMANTICS = unchecked((int) 0x02000000);<br /> public const int FILE_FLAG_POSIX_SEMANTICS = unchecked((int) 0x01000000);<br /> public const int FILE_FLAG_OPEN_REPARSE_POINT =
unchecked((int) 0x00200000);<br /> public const int FILE_FLAG_OPEN_NO_RECALL = unchecked((int) 0x00100000);<br /> public const int FILE_FLAG_FIRST_PIPE_INSTANCE= unchecked((int) 0x00080000);<br /> public
const int FILE_FLAG_OVERLAPPED =unchecked((int) 0x40000000);//通过结构变量来保存和设置文件<br /> #endregion <br /> #region 指定文件的属性<br /> public const int FILE_ATTRIBUTE_ARCHIVE =unchecked((int) 0x20);//归档<br /> public
const int FILE_ATTRIBUTE_COMPRESSED =unchecked((int) 0x800);//<br /> public const int FILE_ATTRIBUTE_DIRECTORY = unchecked((int)0x10);//目录<br /> public const int FILE_ATTRIBUTE_HIDDEN = unchecked((int)0x2);//隐藏<br
/> public const int FILE_ATTRIBUTE_NORMAL = unchecked((int)0x80);//正常<br /> public const int FILE_ATTRIBUTE_READONLY =unchecked((int) 0x1);//只读<br /> public const int FILE_ATTRIBUTE_SYSTEM = unchecked((int)0x4);//系统文件<br
/> public const int FILE_ATTRIBUTE_TEMPORARY = unchecked((int)0x100);//临时存储文件</p> <p> #endregion<br /> public const int INVALID_HANDLE_VALUE =-1;<br /> public const int INVALID_FILE_SIZE=unchecked((int)0xFFFFFFFF);<br
/> public const int INVALID_SET_FILE_POINTER =-1;<br /> public const int INVALID_FILE_ATTRIBUTES =-1;<br /> public const int File_Begin = 0;<br /> public const int
File_Current = 1;<br /> public const int File_End = 2;<br /> #region 指定文件的创建方式<br /> public const int CREATE_NEW
= 1;<br /> public const int CREATE_ALWAYS = 2;<br /> public const int OPEN_EXISTING = 3;<br /> public const int OPEN_ALWAYS
= 4;<br /> public const int TRUNCATE_EXISTING = 5;<br /> #endregion<br /> #region 指定文件的存取模式<br /> public const int GENERIC=0;<br /> public const int GENERIC_READ=1;<br
/> public const int GENERIC_WRITE=2;<br /> #endregion<br /> #region 指定文件的共享模式<br /> public const int File_Share_No=0;<br /> public const int File_Share_Delete=0x3;<br
/> public const int File_Share_Read=0x1;<br /> public const int File_Share_Write=0x2;<br /> #endregion<br /> public struct OVERLAPPED <br /> {<br /> public int
Internal;<br /> public int InternalHigh;<br /> public int offset;<br /> public int OffsetHigh;<br /> public HANDLE hEvent;<br /> }</p> <p> /// <summary><br /> ///
指定文件的安全属性<br /> /// </summary><br /> public struct SECURITY_ATTRIBUTES <br /> {<br /> public int nLength;<br /> public
int lpSecurityDescriptor;<br /> public int bInheritHandle; <br /> }<br /> /// <summary><br /> /// Create A New File <br /> /// </summary><br
/> /// <param name="lpFileName">FileName :end with NULL</param><br /> /// <param name="dwDesiredAccess">Access Mode</param><br /> /// <param name="dwShareMode">Share Mode</param><br
/> /// <param name="lpSec">文件安全属性</param><br /> /// <param name="dwCreationDisposition">Creat Mode</param><br /> /// <param name="dwFlagsAndAttributes">其值为=Flags|Attributes</param><br /> ///
<param name="hTemplateFile">临时文件句柄可以为NULL</param><br /> /// <returns></returns><br /> [DllImport("Kernel32.dll") ]<br /> public extern static System.IntPtr CreateFile(<br /> string
lpFileName,<br /> System.UInt32 dwDesiredAccess,<br /> System.UInt32 dwShareMode,<br /> ref SECURITY_ATTRIBUTES lpSec,<br /> System.UInt32 dwCreationDisposition,<br /> System.UInt32
dwFlagsAndAttributes,<br /> System.IntPtr hTemplateFile<br /> );<br /> /// <summary><br /> /// 创建一个临时文件<br /> /// </summary><br /> /// <param name="lpPathName">以NULL结尾的目录路径名</param><br
/> /// <param name="lpPrefixString">临时文件名的前缀字符串(以NULL结尾)</param><br /> /// <param name="uUnique">为0时将返回一个唯一的整数</param><br /> /// <param name="lpTempFileName">接受临时文件名的缓冲区</param><br /> ///
<returns></returns><br /> [DllImport("Kernel32.dll") ]<br /> public extern static uint GetTempFileName(<br /> string lpPathName,<br />
<br /> string lpPrefixString ,<br /> uint uUnique,<br /> ref string lpTempFileName);<br /> ///
<summary><br /> /// 为一个已打开的文件设置文件指针<br /> /// </summary><br /> /// <param name="hFile">已经打开的文件名柄</param><br /> /// <param name="lDistanceToMove">文件指针要移动的byte数</param><br /> ///
<param name="lpDistanceToMoveHigh">。。</param><br /> /// <param name="dwMoveMethod">移动方式:File_Begin,File_End,File_Current</param><br /> /// <returns></returns><br />[DllImport("Kernel32.dll") ]<br /> public
extern static uint SetFilePointer(<br /> HANDLE hFile,<br /> int lDistanceToMove,//number of bytes to move file pointer<br /> ref int lpDistanceToMoveHigh, //point to high_order
dword of distance to move<br /> int dwMoveMethod//how to move<br /> );</p> <p> /// <summary><br /> /// Write Data to File<br /> /// </summary><br /> /// <param
name="hFile">OpenFile返回 的文件句柄</param><br /> /// <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: 在此处添加构造函数逻辑
//
}
}
}