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 ...
随机推荐
- Oracle安装部署之命令建库
1.建目录: [oracle@wen ~]$ mkdir $ORACLE_BASE/admin/rezin/{a,b,c,dp}dump -p [oracle@wen ~]$ mkdir $ORACL ...
- sql中union 和union all
两者都是把两个表合并到一起,不同的是,union是要去重的,union all不去重
- Python-OpenCV —— 基本操作详解
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Pyt ...
- 【从0開始Tornado建站】显示全部注冊用户
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/littlethunder/article/details/25559749 显示注冊 ...
- MYSQL常见的可优化点
MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...
- Comparable和Comparator的使用
1:对象实现Comparable, 那么对象就具有了比较功能 package comparableAndComparator; import java.util.Collections; import ...
- windows安装并破解navicat.
1:下载以下两个文件. patchNavicat.exe: https://pan.baidu.com/s/1ZtV20GUGfZHcXHRTEb5tYg navicatforMysql.exe: ...
- PAT 1028 List Sorting[排序][一般]
1028 List Sorting (25)(25 分) Excel can sort records according to any column. Now you are supposed to ...
- 二进制协议 vs 文本协议
二进制协议 vs 文本协议 在服务器程序开发过程中,各个服务直接需要进行交互.这样就需要定义消息的协议,一般来说协议主要包括二进制协议和文本协议,下面就我在工作中用到的两种协议说说自己的看法. 1 二 ...
- ios一些问题
多线程,加锁,如何互斥. http里面的get put post的差别 sockect tcp udp