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.通过文件过滤器和 ...
随机推荐
- StringUtils用法(isNotEmpty和isNotBlank)
isNotEmpty将空格也作为参数,isNotBlank则排除空格参数 参考 Quote StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String ...
- 用树状数组求逆序对数(poj2299)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 46995 Accepted: 17168 ...
- 《Maven实战》第5章 坐标和依赖
5.1 Maven坐标——项目唯一标识 groupId(必须定义):定义Mavan项目隶属的实际项目,如SpringFramework,一个实际项目可包含多个Maven项目 artifactId(必须 ...
- vue.js 调用iOS原生方法,JavaScriptCore
1. 2. 3. 4.vue.js调用
- NO.2 You must restart adb and Eclipse多种情形分析与解决方案
一.问题描述: 运行android程序控制台输出 The connection to adb is down, and a severe error has occured. ...
- JS Object To C# ASP.Net ModelBind
之前做项目的时候发现,Jquery自带的Form 序列化函数.与asp.net 里边的Modelbinding格式不匹配,所以写了一个可以把前端的Object对象序列化成ModelBinding认识的 ...
- Java多线程 - Callable和Future
已知的创建多线程的方法有继承Tread类和实现Runnable方法.此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体.但是call()方法与r ...
- MSSQL2005数据库显示单一用户模式,无法进行任何操作
MSSQL2005数据库显示单一用户模式,无法进行任何操作 经查询,使用exec sp_who进行查看链接线程,发现仍然有链接不断进行请求,将链接踢出,然后通过命令修复即可恢复 处理步骤: exec ...
- SSL HTTPS 生成证书
SSL HTTPS 一.生成服务器私钥.公钥 $ openssl genrsa -out server.key 2048 $ openssl rsa -in server.key -pubout -o ...
- SpringBoot下的Dubbo和Zookeeper整合
最近一直在学各种分布式的内容,学到了dubbo分布式服务框架就想写个小demo使用一下,但是由于我要整合在SpringBoot框架中,SpringBoot框架毕竟提倡的是java注解配置,XML文件不 ...