HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, // 文件路径 __in DWORD dwDesiredAccess, // 访问权限,GENERIC_READ | GENERIC_WRITE __in DWORD dwShareMode, // 共享模式,NULL | FILE_SHARE_READ | FILE_SHARE_WRITE __in LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性 __in DWORD dwCreationDisposition, // 创建配置,CREATE_ALWAYS | CREATE_NEW | OPEN_ALWAYS | OPEN_EXISTING __in DWORD dwFlagsAndAttributes, // 扩展属性,NULL | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY __in HANDLE hTemplateFile // 指定一个文件句柄,新文件将从这个文件中复制扩展属性。NULL ); BOOL WINAPI ReadFile( __in HANDLE hFile, // 文件句柄 __out LPVOID lpBuffer, // 接收数据用的 buffer __in DWORD nNumberOfBytesToRead, // 要读取的字节数 __out LPDWORD lpNumberOfBytesRead, // 实际读取到的字节数 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 结构,一般设定为 NULL ); BOOL WINAPI WriteFile( __in HANDLE hFile, // 文件句柄 __in LPCVOID lpBuffer, // 要写入的数据 __in DWORD nNumberOfBytesToWrite, // 要写入的字节数 __out LPDWORD lpNumberOfBytesWritten, // 实际写入的字节数 __in LPOVERLAPPED lpOverlapped // OVERLAPPED 结构,一般设定为 NULL ); DWORD WINAPI GetFileSize( __in HANDLE hFile, // 文件句柄 __out LPDWORD lpFileSizeHigh // high-order 的返回值,一般设定为 NULL );
HANDLE hFile = CreateFile(TEXT("E:\\CreateFileDemo.txt"), //创建文件的名称。
GENERIC_WRITE|GENERIC_READ, // 写和读文件。
0, // 不共享读写。
NULL, // 缺省安全属性。
CREATE_ALWAYS, // 如果文件存在,也创建。
FILE_ATTRIBUTE_NORMAL, // 一般的文件。
NULL); // 模板文件为空。
if (hFile == INVALID_HANDLE_VALUE)
{
OutputDebugString(TEXT("CreateFile fail!\r\n"));
}
写入缓冲区
const int BUFSIZE = 4096;
char chBuffer[BUFSIZE];
memcpy(chBuffer,"Test",4);
DWORD dwWritenSize = 0;
BOOL bRet = WriteFile(hFile,chBuffer,4,&dwWritenSize,NULL);
if (bRet)
{
OutputDebugString(TEXT("WriteFile 写文件成功\r\n"));
}
只有调用了FlushFileBuffers,文件数据才会真正被写入
DWORD dwReadSize = 0;
ZeroMemory(chBuffer,4096);
bRet = ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);
if (bRet)
{
OutputDebugString(TEXT("ReadFile 读文件成功\r\n"));
}
else
{
//获取出错码。
DWORD dwError = GetLastError();
//处理出错。
TCHAR chErrorBuf[1024];
wsprintf(chErrorBuf,TEXT("GetLastError()=%d\r\n"),dwError);
OutputDebugString(chErrorBuf);
}
LONG lDistance = 0;
DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);
SetEndOfFile函数,将当前文件位置设为文件末尾,GetFileSizeEx返回文件末尾大小
SetEndOfFile(hFile);
LARGE_INTEGER liFileSize;
GetFileSizeEx(hFile,&liFileSize);