C++笔记之CopyFile和MoveFile的使用
1、函数定义
CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖)
MoveFile(A, B);表示将文件A移动到B
2.函数原型
CopyFile:

MoveFile:

由函数原型可以看出,这两个函数的前两个输入参数都为LRCWSTR类型,如果我们定义的是char*,记得转换成LRCWSTR,否则会报错;
另外,这两个函数都返回一个bool型变量,表示执行成功与否,当目标位置路径不存在时,会return 0
3、Demo
示例一:
CopyFile:
#include <fstream>
#include <windows.h> int main()
{
char *fn = "test.txt"; std::ofstream out(fn);
if (!out.is_open())
return ;
out.close(); WCHAR buf[];
memset(buf, , sizeof(buf));
MultiByteToWideChar(CP_ACP, , fn, strlen(fn) + , buf, sizeof(buf) / sizeof(buf[]));
CopyFile(buf, L"../file/output.txt", FALSE);//FALSE:如果目标位置已经存在同名文件,就覆盖,return 1
//TRUE:如果目标位置已经存在同名文件,则补拷贝,return 0
//后者路径若不错在,return 0
system("pause");
return ;
}
CopyFile:
#include <fstream>
#include <windows.h> int main()
{
char *fn = "test.txt"; std::ofstream out(fn);
if (!out.is_open())
return ;
out.close(); WCHAR buf[];
memset(buf, , sizeof(buf));
MultiByteToWideChar(CP_ACP, , fn, strlen(fn) + , buf, sizeof(buf) / sizeof(buf[]));
MoveFile(buf, L"../file/output.txt");//FALSE:将前者移动到后者中(后者路径若不错在,return 0) system("pause");
return ;
}
示例二:
#include <WINDOWS.H> int main()
{
char *sourcefile = "d://source//p.png";//源文件
char *targetfile = "d://target//q.png";//目标文件
CopyFile(sourcefile , targetfile , FALSE);//false代表覆盖,true不覆盖
return ;
}
4、将图片批量复制到另一个文件夹
//MyCopyFile.cpp #include <iostream>
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include "io.h"
#include <fstream>
#include <WINDOWS.H> //define the buffer size. Do not change the size!
#define DETECT_BUFFER_SIZE 0x20000
using namespace std; //getFiles_Name函数声明,作用:读取path路径下的.png格式文件,并将每个.png文件的路径和文件名分别存储到files和filesname
void getFiles_Name(string path, vector<string>& files, vector<string>& filesname); int main(void)
{
vector<string> classnames;
classnames.push_back(string("disgust"));
classnames.push_back(string("neutral"));
classnames.push_back(string("scream"));
classnames.push_back(string("smile"));
classnames.push_back(string("squint"));
classnames.push_back(string("surprise")); for (int iexpress = ; iexpress < ;iexpress++)
{
string inputStr = "C:\\SourceFile\\" + classnames[iexpress];
string outputStr = "C:\\TargetFile\\" + classnames[iexpress] + "\\"; vector<string> files;
vector<string> filesname;
////获取该路径下的所有文件
getFiles_Name(inputStr, files, filesname); //循环复制文件
for (int k = ; k < files.size(); k++)
{
unsigned char *pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
if (!pBuffer)
{
fprintf(stderr, "Can not alloc buffer.\n");
return -;
} cout << files[k] << endl;
CopyFile(files[k].c_str(), (outputStr + filesname[k]).c_str(), FALSE);//false代表覆盖,true不覆盖
//若文件路径为string类型变量,例如为pathstr,则需使用pathstr.c_str()转换即可;
free(pBuffer);
}
}
return ;
} void getFiles_Name(string path, vector<string>& files, vector<string>& filesname)
{
//文件句柄
intptr_t hFile;
//文件信息,声明一个存储文件信息的结构体
struct _finddata_t fileinfo;
string p;//字符串,存放路径
//string name;
if ((hFile = _findfirst(p.assign(path).append("\\*.png").c_str(), &fileinfo)) != -)//若查找成功,则进入
{
do
{
files.push_back(path + "\\" + fileinfo.name);
filesname.push_back(fileinfo.name);
} while (_findnext(hFile, &fileinfo) == );
//_findclose函数结束查找
_findclose(hFile);
}
}
如果出现以下错误:

不能从const char*转换为LPCWSTR的原因及解决方法:
解决方法:
项目-->2.MyCopyFile属性-->3.配置属性-->4.常规-->5.字符集:改成 未设置


错误原因:
因为我的程序在UNICODE(宽字节)字符集下运行, UNICODE与ANSI有什么区别呢?简单的说,UNICODE版的字符比ANSI 的内存占用大,比如:Win32程式中出现的标准定义 char 占一个字节,而 char 的UNICODE版被定义成这样: typedef unsigned short wchar_t ;占2个字节。 所以有字符做参数的函数相应也用两个版本了。
参考博客:
https://blog.csdn.net/u012043391/article/details/77663644
https://blog.csdn.net/callmeado/article/details/21826679
https://www.cnblogs.com/dongsheng/p/3586418.html
https://blog.csdn.net/linjingtu/article/details/53190491
C++笔记之CopyFile和MoveFile的使用的更多相关文章
- C++中CopyFile、MoveFile的用法
1.含义 CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖) MoveFile(A, B);表示将文件A移动到B 2.函数原型 C ...
- [WinAPI] API 9 [文件的删除、复制和移动功能]
Windows系统为文件的删除.复制.重命名或移动文件提供了相应的API函数.删除文件使用DeleteFile函数:复制文件使用CopyFile函数:重命名文件和移动文件实际是一个操作,使用MoveF ...
- Windows API教程文件系统
本篇文章主要介绍了"Windows API教程文件系统",主要涉及到Windows API教程文件系统方面的内容,对于Windows API教程文件系统感兴趣的同学可以参考一下. ...
- SHFileOperation的用法
//删除文件或者文件夹bool DeleteFile(char * lpszPath){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_ALLOWUNDO ...
- lua工具库penlight--04路径和目录
使用路径 程序不应该依赖于奇葩的系统,这样你的代码会难以阅读和移植.最糟糕的是硬编码的路径, windows和Unix的路径分隔符正好相反.最好使用path.join,它可以帮助你解决这个问题. pl ...
- 12、NIO、AIO、BIO一
1.NIO概述 什么是NIO:NIO是New I/O的简称,与旧式的基于流的I/O方式相对,从名字看,他表示新的一套JAVA I/O标准.它是在java1.4中被纳入到JDK中的,并具有以下特性: - ...
- VC 复制移动删除重命名文件文件
说明: 1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile 2.每个函数都先拷贝了原来的路径,保证了路径是以2个\0\0结尾.(如果不以2个\ ...
- 学习笔记2—MATLAB的copyfile技巧
clearclc %一.新建文件夹,%二.将原始路径下的数据剪切到新建文件夹中 path = ('E:\DFC_DMN_ASD_DATA_res\Cluster_hcc\4,6,8\Cluster_6 ...
- org.apache.commons.io——FileUtils学习笔记
FileUtils类的应用 1.写入一个文件: 2.从文件中读取: 3.创建一个文件夹,包括文件夹: 4.复制文件和文件夹: 5.删除文件和文件夹: 6.从URL地址中获取文件: 7.通过文件过滤器和 ...
随机推荐
- centos 7 install virtualbox
from:https://wiki.centos.org/HowTos/Virtualization/VirtualBox Installing VirtualBox cd /etc/yum.repo ...
- 20145109 《Java程序设计》第五周学习总结
20145109 <Java程序设计>第五周学习总结 教材学习内容总结 Chapter 8 Exception Handling try, catch All Exceptions are ...
- React Native中加载指示器组件ActivityIndicator使用方法
这里讲一下React Native中的一个组件——ActivityIndicator,这是一个加载指示器,俗称菊花,很常见的,效果如下所示: 可以看到图中有两个加载指示器,一大一小,这是尺寸不是我设置 ...
- JAVA文件下载,页面显示另存为效果
经过测试 firefox.QQ.IE 浏览器是可以的 chrome浏览器不行(直接下载了) 1. 系统框架springmvc+jsp 2. 后台servlet代码 @RequestMapping( ...
- quartz(5)--作业管理和存储
作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数.如果你的作业是30分钟后或每30秒调用,这不是很有用.事实上,作业执行需要非常准确和即时调用在被调度作业上的execute()方法.Quar ...
- Java socket - 使用代理服务器
为什么使用代理服务器不需要多说了. 使用Proxy Java提供了Proxy类实现使用代理进行通信. Proxy类的构造器Proxy(Proxy.Type type, SocketAddress sa ...
- NFS的安装配置使用
/////////////////////////////NFS///////////////////////////////////////////////////写在前面:NFS在数据传输/信息传 ...
- 缓存技术内部交流_01_Ehcache3简介
参考资料: http://www.ehcache.org/documentation/3.2/getting-started.html http://www.ehcache.org/documenta ...
- 报错cannot be cast to javassist.util.proxy.Proxy
出现这种错误还有一个原因:hibernate和struts中都有javassit的jar包,把其中的低版本删除就行了.
- ps切图步骤
1.复制图层到新建 2.alt + i + r 裁剪 依次按 3.ctrl + alt + shift + s 保存 裁剪图标 复制到图层 , 删除背景,并复制样式 就可以做到 背景透明.