VC++ 利用CreateFile、ReadFile和WriteFile实现CopyFile
1. CreateFile:这是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
参照:http://www.cppblog.com/yishanhante/articles/19545.html
2. ReadFile:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作
BOOL ReadFile(HANDLEhFile,//文件的句柄LPVOIDlpBuffer,//用于保存读入数据的一个缓冲区DWORDnNumberOfBytesToRead,//要读入的字节数LPDWORDlpNumberOfBytesRead,//指向实际读取字节数的指针LPOVERLAPPEDlpOverlapped//如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。//该结构定义了一次异步读取操作。否则,应将这个参数设为NULL);参数说明
BOOL WriteFile(HANDLEhFile,//文件句柄LPCVOIDlpBuffer,//数据缓存区指针DWORDnNumberOfBytesToWrite,//你要写的字节数LPDWORDlpNumberOfBytesWritten,//用于保存实际写入字节数的存储区域的指针LPOVERLAPPEDlpOverlapped//OVERLAPPED结构体指针);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);//关闭句柄。
}
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的更多相关文章
- 用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)
文件拷贝程序 程序类型:Console 参数:源文件名 目的文件名 要求:1.只能使用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle ...
- 串口通信中ReadFile和WriteFile的超时详解!
源:串口通信中ReadFile和WriteFile的超时详解! 在用ReadFile和WriteFile读写串行口时,需要考虑超时问题.如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFi ...
- VC利用调试寄存器实现硬件断点源码
[文章标题]:VC利用调试寄存器实现硬件断点源码 [文章作者]:yhswwr(SilenceRet) [作者QQ]:3412259 [编写语言]:C++ [使用工具]:VS2008.VC++9 [本文 ...
- 使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下读写绝对扇区的方法
也就是在CreateFile的时候打开文件名指定: "\\.\Device"就可以了. 因为代码比较短, 所以我不做注释, 相信大家看代码就能明白意思了. 另外这里读写的都是软盘A ...
- 使用API进行文件读写——CreateFile,ReadFile,WriteFile等
看了这个帖子: http://www.vbgood.com/thread-99249-1-1.html 就写了一个使用API读写文件的简单类,苦力活. 演示代码在附件里. '********* ...
- 第三十二篇 -- CreateFile、ReadFile、WriteFile
一.CreateFile 这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道. 函数原型: HANDLE WIN ...
- CreateFile,ReadFile等API详解(或者说MSDN的翻译)
一.*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象.通信资源对象.目录对象(只能打开).磁盘设备对象.文件对象.邮槽对象.管道 ...
- VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。
1.利用ShellExecute 可以条用默认邮件客户端,但不能发送带附件的邮件 mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文 如:ShellExe ...
- VC++ 利用PDB和dump文件定位问题并进行调试
转载:https://blog.csdn.net/zfs_kuai/article/details/43646665 转载:https://blog.csdn.net/i_chaoren/articl ...
随机推荐
- JavaScript中的对象描述符(属性特性)
我们先创建一个对象: var person = { name: "Nicholas", _job: "Software Engineer", sayName: ...
- (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析
(3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...
- 如何删除帝国cms面包屑导航中首页链接的/index.html
前面一篇"帝国cms面包屑导航的首页链接锚文本改成关键字"中xmyanke有写到改首页链接的方法,但是感觉比较麻烦,这里就说说如何删除帝国cms面包屑导航中首页链接的/index. ...
- js-jquery-Validate校验【一】
一.导入 js 库 <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.j ...
- 11.sklearn.preprocessing.LabelEncoder的作用
In [5]: from sklearn import preprocessing ...: le =preprocessing.LabelEncoder() ...: le.fit(["p ...
- 十天精通CSS3(1)
什么是CSS3? CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari.firefox.opera.甚至360都已经支 ...
- Scala集合类详解
对scala中的集合类虽然有使用,但是一直处于一知半解的状态.尤其是与java中各种集合类的混合使用,虽然用过很多次,但是一直也没有做比较深入的了解与分析.正好趁着最近项目的需要,加上稍微有点时间,特 ...
- Sequence(priority_queue)
这题很智慧. VJ上4000多ms #include<cstdio> #include<algorithm> #include<queue> #include &l ...
- jpress-配合nginx与tomcat安装
目录 1. 前言 2. yum安装tomcat 2. yum安装MySQL 3. 下载JPress并安装 4. 配置tomcat使其可以部署多个网站 5. 安装nginx并配置 6. 将已经安装好的j ...
- container / pull-left
<div class="container"> <h2>实例</h2> <div class="pull-left"& ...