win API 文件操作

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 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 设置文件当前偏移量

因为他能获取的大小只有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 的类...请期待.....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值