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. 几种常见ECG数据格式及对比

    SCP.DICOM.HL7aECG.GDF格式及对比 本文档首先给出SCP.DICOM.HL7aECG.GDF四种心电信号格式的具体数据结构,然后分析其各自的特点及适用范围. 一.SCP-ECG fo ...

  2. 【USACO 3.1.2】总分

    [描述] 学生在我们USACO的竞赛中的得分越多我们越高兴.我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助.我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是 ...

  3. os mac apache+php+mysql环境配置

    1.启用系统自带的apache 服务 打开终端(terminal) #sudo apachectl start #sudo vi /etc/apache2/httpd.conf 修改 LoadModu ...

  4. js 点名

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. jquery图片上传

    总结两个图片上传的方法: 一:使用jquery.form中的ajaxSubmit来实现上传. <script src="~/JavaScript/jquery-1.10.2.min.j ...

  6. Rxjava+Retrofit2+Okhttp3多文件上传(服务器端代码+客户端代码)

    所有代码亲测可用,如有问题,欢迎指正. 首先在ApiService接口文件中新建文件上传接口 public interface ApiService { static final String BAS ...

  7. 从Profile中窥探Unity的内存管理

    刨根问底U3D---从Profile中窥探Unity的内存管理 这篇文章包含哪些内容 这篇文章从Unity的Profile组件入手,来探讨一下Unity在开发环境和正式环境中的内存使用发面的一些区别, ...

  8. j2ee爬坑行之二 servlet

    servlet生命周期 web容器加载servlet 类 web容器调用servlet的构造函数,初始化servlet. web容器调用servlet的init()方法.注意该方法在servlet的一 ...

  9. 【转】(DT系列四)驱动加载中, 如何取得device tree中的属性

    原文网址:http://www.cnblogs.com/biglucky/p/4057488.html 本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属 ...

  10. ISNULL-sqlserver语句

    语法 ISNULL ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 NULL的表达式.check_expres ...