1. CreateFile:这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。

参照:http://www.cppblog.com/yishanhante/articles/19545.html

2. ReadFile:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作

BOOL ReadFile(
HANDLEhFile,//文件的句柄
LPVOIDlpBuffer,//用于保存读入数据的一个缓冲区
DWORDnNumberOfBytesToRead,//要读入的字节数
LPDWORDlpNumberOfBytesRead,//指向实际读取字节数的指针
LPOVERLAPPEDlpOverlapped
//如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。
//该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
);
 

参数说明

HANDLE hFile, 需要读入数据的文件指针,这个指针指向的文件必须是GENERIC_READ 访问属性的文件。
LPVOID lpBuffer,接收数据的缓冲区。
DWORD nNumberOfBytesToRead,指定要读取的字节数。
LPDWORD lpNumberOfBytesRead,指向一个DWORD类型变量的指针,用来接收读取的字节数。如果下一个参数为NULL,那么一定要传入这个参数。
LPOVERLAPPED lpOverlapped OVERLAPPED结构体指针,如果文件是以FILE_FLAG_OVERLAPPED方式打开的话,那么这个指针就不能为NULL。
FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作。
 
 
返回值:
调用成功,返回非0
调用不成功,返回为0
会设置GetLastError。如启动的是一次异步读操作,则函数会返回零值,并将ERROR_IO_PENDING设置成GetLastError的结果。如结果不是零值,但读入的字节数小于nNumberOfBytesToRead参数指定的值,表明早已抵达了文件的结尾。
 
3.

BOOL WriteFile(
HANDLEhFile,//文件句柄
LPCVOIDlpBuffer,//数据缓存区指针
DWORDnNumberOfBytesToWrite,//你要写的字节数
LPDWORDlpNumberOfBytesWritten,//用于保存实际写入字节数的存储区域的指针
LPOVERLAPPEDlpOverlapped//OVERLAPPED结构体指针
);
例子:
 1.利用CreateFile和ReadFile获取文件的buffer
 voidReadFile(char*str)
{
HANDLEpfile;
pfile=::CreateFile(str,GENERIC_READ,,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS,NULL);//用这个函数比OpenFile好
if(pfile==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,"打开文件失败","Error",MB_OK);
CloseHandle(pfile);//一定注意在函数退出之前对句柄进行释放。
return;
}
DWORDfilesize=GetFileSize(pfile,NULL);
char*buffer=newchar[filesize+];//最后一位为'/0',C-Style字符串的结束符。
DWORDreadsize=;
ReadFile(pfile,buffer,filesize,&readsize,NULL); memset(buffer,,filesize+); buffer[filesize]=;
MessageBox(NULL,buffer,"BufferSize",MB_OK);
//善后工作
delete[]buffer;//注意是delete[]而不是delete
CloseHandle(pfile);//关闭句柄。
}
 
 2.利用CreateFile、ReadFile和 WriteFile实现CopyFile函数
 void MyCopyFile(wstring pExitFile,wstring pNewFile)
{
HANDLE pRfile;
pRfile=::CreateFile(pExitFile.c_str(),GENERIC_READ|GENERIC_WRITE,,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS,NULL);//用这个函数比OpenFile好
if(pRfile==INVALID_HANDLE_VALUE)
{
//MessageBox(NULL,"打开文件失败","Error",MB_OK);
CloseHandle(pRfile);//一定注意在函数退出之前对句柄进行释放。
return ;
}
DWORD filesize=GetFileSize(pRfile,NULL);
char*buffer=new char[filesize+];//最后一位为'/0',C-Style字符串的结束符。
memset(buffer,,filesize+);
DWORD readsize=;
ReadFile(pRfile,buffer,filesize,&readsize,NULL);
buffer[filesize]=;
CloseHandle(pRfile);//关闭句柄 //写数据 HANDLE pWfile;
pWfile=::CreateFile(pNewFile.c_str(),GENERIC_WRITE|GENERIC_READ,,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);//用这个函数比OpenFile好
if(pWfile==INVALID_HANDLE_VALUE)
{
//MessageBox(NULL,"打开文件失败","Error",MB_OK);
CloseHandle(pWfile);//一定注意在函数退出之前对句柄进行释放。
return ;
} DWORD writesize = ; ::WriteFile(pWfile,buffer,filesize,&writesize,NULL); //善后工作
delete[]buffer;//注意是delete[]而不是delete
CloseHandle(pWfile);//关闭句柄
}

VC++ 利用CreateFile、ReadFile和WriteFile实现CopyFile的更多相关文章

  1. 用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)

    文件拷贝程序 程序类型:Console 参数:源文件名   目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...

  2. 串口通信中ReadFile和WriteFile的超时详解!

    源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...

  3. VC利用调试寄存器实现硬件断点源码

    [文章标题]:VC利用调试寄存器实现硬件断点源码 [文章作者]:yhswwr(SilenceRet) [作者QQ]:3412259 [编写语言]:C++ [使用工具]:VS2008.VC++9 [本文 ...

  4. 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法

    也就是在CreateFile的时候打开文件名指定: "\\.\Device"就可以了. 因为代码比较短, 所以我不做注释, 相信大家看代码就能明白意思了. 另外这里读写的都是软盘A ...

  5. 使用API进行文件读写——CreateFile,ReadFile,WriteFile等

    看了这个帖子:  http://www.vbgood.com/thread-99249-1-1.html  就写了一个使用API读写文件的简单类,苦力活.  演示代码在附件里.  '********* ...

  6. 第三十二篇 -- CreateFile、ReadFile、WriteFile

    一.CreateFile 这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道. 函数原型: HANDLE WIN ...

  7. CreateFile,ReadFile等API详解(或者说MSDN的翻译)

    一.*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象.通信资源对象.目录对象(只能打开).磁盘设备对象.文件对象.邮槽对象.管道 ...

  8. VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。

    1.利用ShellExecute 可以条用默认邮件客户端,但不能发送带附件的邮件 mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文   如:ShellExe ...

  9. VC++ 利用PDB和dump文件定位问题并进行调试

    转载:https://blog.csdn.net/zfs_kuai/article/details/43646665 转载:https://blog.csdn.net/i_chaoren/articl ...

随机推荐

  1. 自己实现一个简单的网络音乐mp3播放器

    大繁至简,把思路搞清楚才是最重要的,如何去做依托于使用什么来实现这项功能 列出我使用的基本类 NSURLSessionDataTask 数据获取类 NSFileHandle 数据缓存和数据读取类 Au ...

  2. firmware 固件

    COMPPUTER SCIENCE AN OVERVIEW 11th Edition firmware 固件 boot loader 引导程序 device driver 设备驱动程序 Basic I ...

  3. linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

    linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86 ...

  4. mongodb基础语法

    Mongodb与关系型数据库最大的区别就是无约束, 既无字段(外键等)约束, 也没有数据类型约束, 以json存储 安装 启动Mongodb(默认在c盘找 data/db/文件夹) 服务端: mong ...

  5. nodejs(五)同步异步--USING SETTIMEOUT INSTEAD OF SETINTERVAL TO FORCE SERIALIZATION

    Let’s say you want a function that does some I/O — such as parsing a log fi le — that will periodica ...

  6. LINUX的前后台程序查看切换

    1.在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行 root@Ubuntu$ ./tcpserv01 & 2.如果程序正在前台运行,可以使用 Ctrl ...

  7. 011-spring cloud gateway-使用

    一.pom增加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. 001-Spring Cloud Edgware.SR3 升级最新 Finchley.SR1,spring boot 1.5.9.RELEASE 升级2.0.4.RELEASE注意问题点

    一.前提 升级前 => 升级后 Spring Boot 1.5.x => Spring Boot 2.0.4.RELEASE Spring Cloud Edgware SR3 => ...

  9. Centos 设置zookeeper开机自启动

    把zookeeper做成服务 1.进入到/etc/rc.d/init.d目录下,新建一个zookeeper脚本 [root@zookeeper ~]# cd /etc/rc.d/init.d/ [ro ...

  10. phpmyadmin-配合nginx与php安装

    1. 概况 phpMyAdmin是用来在网页端图形化操作MySQL数据库的工具,使用起来非常直观,目前最新版本是4.8.3.在搭建web集群架构时可能有这样的需求,数据库安装在专门的一台机器上,但是希 ...