CreateFile 创建一个文件
函数原型
HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,// 文件路径
_In_ DWORD dwDesiredAccess,//打开文件权限
_In_ DWORD dwShareMode,//共享文件权限
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,//可以是nullptr
_In_ DWORD dwCreationDisposition,//文件属性
_In_ DWORD dwFlagsAndAttributes,//文件或设备属性和旗帜
_In_opt_ HANDLE hTemplateFile//貌似文件加密有用
);
HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,// 文件路径
_In_ DWORD dwDesiredAccess,//打开文件权限
_In_ DWORD dwShareMode,//共享文件权限
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,//可以是nullptr
_In_ DWORD dwCreationDisposition,//文件属性
_In_ DWORD dwFlagsAndAttributes,//文件或设备属性和旗帜
_In_opt_ HANDLE hTemplateFile//貌似文件加密有用
);
示例
HANDLE hFile = CreateFile(L"test.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr, OPEN_ALWAYS,FILE_FLAG_OVERLAPPED,
FILE_FLAG_OVERLAPPED, nullptr);
if (hFile == INVALID_HANDLE_VALUE)
{
return false;
}
HANDLE hFile = CreateFile(L"test.txt",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr, OPEN_ALWAYS,FILE_FLAG_OVERLAPPED,
FILE_FLAG_OVERLAPPED, nullptr);
if (hFile == INVALID_HANDLE_VALUE)
{
return false;
}
GetFileSize 获取文件物理大小
因为他能获取的大小只有4GB,所以推选使用GetFileSizeEx
BOOL WINAPI GetFileSizeEx( _In_ HANDLE hFile,//文件句柄 _Out_ PLARGE_INTEGER lpFileSize//长度 );
示例
LARGE_INTEGER largeFileSize = { 0 }; GetFileSizeEx(hFile, &largeFileSize);
GetCompressedFileSize 获取文件硬盘大小
这个的大小看着和GetFileSize 没什么区别 但是 有时候 硬盘有可能压缩 会导致 区别
DWORD WINAPI GetCompressedFileSize(
_In_ LPCTSTR lpFileName, //注意 这里传递的是 一个路径并非句柄
_Out_opt_ LPDWORD lpFileSizeHigh//长度
);
示例 LARGE_INTEGER largeFileSize = { 0 };
largeFileSize.LowPart = GetCompressedFileSize(hFile, (LPDWORD)&largeFileSize.HighPart);
largeFileSize.QuadPart;//磁盘大小
SetFilePointer 设置文件当前偏移量
DWORD WINAPI GetCompressedFileSize(
_In_ LPCTSTR lpFileName, //注意 这里传递的是 一个路径并非句柄
_Out_opt_ LPDWORD lpFileSizeHigh//长度
);
示例 LARGE_INTEGER largeFileSize = { 0 };
largeFileSize.LowPart = GetCompressedFileSize(hFile, (LPDWORD)&largeFileSize.HighPart);
largeFileSize.QuadPart;//磁盘大小
因为他能获取的大小只有4GB,所以推选使用SetFilePointerEx
BOOL WINAPI SetFilePointerEx( _In_ HANDLE hFile,//文件句柄 _In_ LARGE_INTEGER liDistanceToMove,//移动文件指针的字节数 _Out_opt_ PLARGE_INTEGER lpNewFilePointer,//接收新文件指针 _In_ DWORD dwMoveMethod//从哪开始 );
示例
示例
SetFilePointerEx(hFile, 0, nullptr, FILE_BEGIN);
SetEndOfFile 设置文件尾
BOOL WINAPI SetEndOfFile( _In_ HANDLE hFile );
示例
SetEndOfFile(hFile);
CloseHandle关闭句柄
示例HRESULT CloseHandle( HANDLE hHandle );
CloseHandle(hFile);
ReadFile 读文件
BOOL WINAPI ReadFile( _In_ HANDLE hFile,//文件句柄 _Out_ LPVOID lpBuffer,//文件的buff _In_ DWORD nNumberOfBytesToRead,//读取多少 _Out_opt_ LPDWORD lpNumberOfBytesRead,//实际读取多少 _Inout_opt_ LPOVERLAPPED lpOverlapped//nullptr );
示例
BYTE bBuffer[MAXBYTE] = { 0 }; DWORD dwReadSize = 0; if(ReadFile(hFile, bBuffer, MAXBYTE, &dwReadSize, nullptr)) { //成功 }
WriteFile 写文件
BOOL WINAPI WriteFile( _In_ HANDLE hFile, _In_ LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped ); 和 读一样
示例
BYTE bBuffer[MAXBYTE] = { 0 }; DWORD dwWriteSize = 0; if(WriteFile(hFile, bBuffer, MAXBYTE, &dwWriteSize, nullptr)) { //成功 }
正在自己封装一个 file 的类...请期待.....