Win32 WriteFile and ReadFile

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!
"));
}

二.WriteFile写文件

写入缓冲区

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 写文件成功
"));
}

三.FlushFileBuffers刷新文件缓冲区

只有调用了FlushFileBuffers,文件数据才会真正被写入

四.ReadFile读文件

DWORD dwReadSize = 0;
ZeroMemory(chBuffer,4096);
bRet = ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);

if (bRet)
{
    OutputDebugString(TEXT("ReadFile 读文件成功
"));
}
else
{
    //获取出错码。
    DWORD dwError = GetLastError(); 
    //处理出错。            
    TCHAR chErrorBuf[1024];
    wsprintf(chErrorBuf,TEXT("GetLastError()=%d
"),dwError);
    OutputDebugString(chErrorBuf);
}

五.设置文件读写位置

LONG lDistance = 0;
DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);

SetEndOfFile函数,将当前文件位置设为文件末尾,GetFileSizeEx返回文件末尾大小

SetEndOfFile(hFile);
LARGE_INTEGER liFileSize;
GetFileSizeEx(hFile,&liFileSize);
原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5163618.html