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

二.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 写文件成功\r\n"));
}

三.FlushFileBuffers刷新文件缓冲区

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

四.ReadFile读文件

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);

Win32 WriteFile and ReadFile的更多相关文章

  1. lua 的 WriteFile 和 ReadFile

    lua 的 ReadFile 和 WriteFile 注意: lua 代码中的 string 可以包含二进制数据 string.len(str) 不会被 '\0' 截断 从 lua 传入 c 时: 需 ...

  2. VC串口通讯,WriteFile或ReadFile没有任何返回??

    别犯低级错误,一定要设置读写超时!!!

  3. SQL Server FileStream

    以往我们对文件管理有两种方法: 数据库只保存文件的路径,具体的文件保存在文件服务器(NFS)上,使用时,编程实现从文件服务器读取文件: 将文件直接以varbinary(max)或image数据类型保存 ...

  4. 关于Winsock编程中IO重叠的概念

    我在看<Windows网络与通信程序设计>(王艳平)这本书时,对重叠IO很不理解,突然就冒出这么一个概念,没一点头绪.就目前的理解做一个整理. 第一种理解:OVERLAPPED,顾名思义为 ...

  5. IRP 与 派遣函数

    什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...

  6. C++和C#进程之间通过命名管道通信(上)

    C++和C#进程之间通过命名管道通信(上) "命名管道"是一种简单的进程间通信(IPC)机制.命名管道可在同一台计算机的不同进程之间,或在跨越一个网络的不同计算机的不同进程之间,支 ...

  7. SQL Server FileStream (转载)

    从SQL SERVER 2008开始,SQL SERVER引入了一种新的文件组类型叫FileStream文件组,如下图所示: 那么这种文件组是用来做什么的呢? 以往我们对文件管理有两种方法: 数据库只 ...

  8. C++中使用内存映射文件处理大文件

    引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile().WriteFile().ReadFile() ...

  9. 派遣函数IRP

    派遣函数是Windows驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的. 用户模式下所有对驱动程序的I/O请求,全部由操作系统转换为一个叫做IR ...

随机推荐

  1. JFrome 登陆/注册/回显/输出流小程序之二

  2. ios--UIButton简单使用

    //这里创建一个圆角矩形的按钮     UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];   /*  注:能 ...

  3. angularJS中如何写控制器

    angularJS中的控制器是一个函数,用来向视图作用域中添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为 当我们在页面上创建一个新的控制器时,angularJS会生成并传递一个新 ...

  4. memcache锁

    锁的使用,一般情况是针对并发或者我们希望程序(crontab的job)串行处理,我们加锁的办法有很多,像文件锁,数据库锁,或者memcache锁,这里关注一下memcache锁,针对memcache锁 ...

  5. thinkphp excel txt文件上传实现

    <?php/************************************************************************************** ***  ...

  6. [Python笔记]第五篇:递归

    本篇主要内容:递归以及冒泡排序 参考文章:(http://www.cnblogs.com/balian/archive/2011/02/11/1951054.html) 递归的概念 递归的概念很简单, ...

  7. SQL Server DAC 管理员专用连接

    DAC 是Dedicated Administrator Connect 的缩写,是专用管理员连接通道,当SQL Server 因为资源不足而无法连接入系统的时候,管理员可通过该通道连接到数据,进行问 ...

  8. (转)JavaScript 开发者经常忽略或误用的七个基础知识点

    英文原文:7 JavaScript Basics Many Developers Aren't Using (Properly) JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和 ...

  9. svn , github工作流

    svn 需要有一台中央服务器,所有的分支,主干,标签,全都保存在这台中央服务器上.开发着需要提交代码时,需要保持中央服务器连接.切换分支时会有本地与服务器网络连接. git 改进了这一点,每台安装有g ...

  10. mapreduce (二) MapReduce实现倒排索引(一) combiner是把同一个机器上的多个map的结果先聚合一次

    1 思路:0.txt MapReduce is simple1.txt MapReduce is powerfull is simple2.txt Hello MapReduce bye MapRed ...