一、创建/打开文件、读文件、写文件及文件大小获取和文件偏移:CreateFile、ReadFile、WriteFile、GetFileSize、SetFilePointer。
CreateFile:创建/打开文件
HANDLE WINAPI CreateFile( //返回值是句柄,错误返回INVALID_HANDLE_VALUE(-1)
_In_ LPCWSTR lpFileName, //文件名
_In_ DWORD dwDesiredAccess,//访问文件想要获取的权限,多权限用“|”相连:GENERIC_READ(读权限)、GENERIC_WRITE(写的权限)、GENERIC_EXECUTE(执行权限)、GENERIC_ALL(所有)
_In_ DWORD dwShareMode,//共享模式,0(不共享),FILE_SHARE_READ(共享读)、FILE_SHARE_WRITE(共享写)
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,//安全属性,默认NULL
_In_ DWORD dwCreationDisposition,//文件不存在的时候的创建选项,见下面
_In_ DWORD dwFlagsAndAttributes,//文件的属性,FILE_ATTRIBUTE_NORMAL(默认属性)、
FILE_ATTRIBUTE_READONLY(只读文件)、FILE_ATTRIBUTE_HIDDEN(隐藏文件)等等。
_In_opt_ HANDLE hTemplateFile //NULL
);
参数:dwCreationDisposition文件不存在的时候的创建选项,类似fopen的r w 等。
- CREATE_ALWAYS:总是创建,不存在则创建,存在则覆盖,原文件内容丢失;
- OPEN_EXISTING:文件一定要存在,否则失败
- CREATE_NEW:不存在则创建,存在则不创建并返回失败
- OPEN_ALWAYS:如果存在则打开文件,不存在则创建文件
- TRUNCATE_EXISTING:如果存在则打开文件并清空文件内容,至少要求GENERIC_WRITE权限,不存在则返回失败;
ReadFile:读文件(从当前文件位置开始读取)
BOOL WINAPI ReadFile( //返回0失败,非0成功,若实际读取字节数=0也是没读到内容
_In_ HANDLE hFile, //文件的句柄
_Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer,//数据缓冲区
_In_ DWORD nNumberOfBytesToRead, //预计的读取字节数
_Out_opt_ LPDWORD lpNumberOfBytesRead, //实际的读取字节数,是指针
_Inout_opt_ LPOVERLAPPED lpOverlapped); //设置为NULL
WriteFile:写文件(从当前的文件位置开始写)
BOOL WINAPI WriteFile(//返回0失败,非0成功
_In_ HANDLE hFile, //文件句柄
_In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer,//数据缓冲区
_In_ DWORD nNumberOfBytesToWrite,//预计写入的字节数
_Out_opt_ LPDWORD lpNumberOfBytesWritten,//实际写入字节数,指针
_Inout_opt_ LPOVERLAPPED lpOverlapped);//设置为NULL
GetFileSize:获取文件大小
DWORD WINAPI GetFileSize( //返回值,文件大小的低32位
_In_ HANDLE hFile, //文件句柄
_Out_opt_ LPDWORD lpFileSizeHigh);//文件大小的高32位,指针
SetFilePointer:设置文件的当前位置指针
DWORD WINAPI SetFilePointer(
_In_ HANDLE hFile, //文件句柄
_In_ LONG lDistanceToMove, //需要位移的值,long类型
_Inout_opt_ PLONG lpDistanceToMoveHigh, //当前文件位置的高32位
_In_ DWOR