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的使用的更多相关文章

  1. C++中CopyFile、MoveFile的用法

    1.含义 CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖) MoveFile(A, B);表示将文件A移动到B 2.函数原型 C ...

  2. [WinAPI] API 9 [文件的删除、复制和移动功能]

    Windows系统为文件的删除.复制.重命名或移动文件提供了相应的API函数.删除文件使用DeleteFile函数:复制文件使用CopyFile函数:重命名文件和移动文件实际是一个操作,使用MoveF ...

  3. Windows API教程文件系统

    本篇文章主要介绍了"Windows API教程文件系统",主要涉及到Windows API教程文件系统方面的内容,对于Windows API教程文件系统感兴趣的同学可以参考一下. ...

  4. SHFileOperation的用法

    //删除文件或者文件夹bool DeleteFile(char * lpszPath){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_ALLOWUNDO ...

  5. lua工具库penlight--04路径和目录

    使用路径 程序不应该依赖于奇葩的系统,这样你的代码会难以阅读和移植.最糟糕的是硬编码的路径, windows和Unix的路径分隔符正好相反.最好使用path.join,它可以帮助你解决这个问题. pl ...

  6. 12、NIO、AIO、BIO一

    1.NIO概述 什么是NIO:NIO是New I/O的简称,与旧式的基于流的I/O方式相对,从名字看,他表示新的一套JAVA I/O标准.它是在java1.4中被纳入到JDK中的,并具有以下特性: - ...

  7. VC 复制移动删除重命名文件文件

    说明: 1.以下封装了4个函数_CopyFile,_DeleteFile,_MoveFile,_ReNameFile 2.每个函数都先拷贝了原来的路径,保证了路径是以2个\0\0结尾.(如果不以2个\ ...

  8. 学习笔记2—MATLAB的copyfile技巧

    clearclc %一.新建文件夹,%二.将原始路径下的数据剪切到新建文件夹中 path = ('E:\DFC_DMN_ASD_DATA_res\Cluster_hcc\4,6,8\Cluster_6 ...

  9. org.apache.commons.io——FileUtils学习笔记

    FileUtils类的应用 1.写入一个文件: 2.从文件中读取: 3.创建一个文件夹,包括文件夹: 4.复制文件和文件夹: 5.删除文件和文件夹: 6.从URL地址中获取文件: 7.通过文件过滤器和 ...

随机推荐

  1. 20145219 《Java程序设计》第05周学习总结

    20145219 <Java程序设计>第05周学习总结 教材学习内容总结 try.catch 1.求平均数程序示例 import java.util.Scanner; public cla ...

  2. jq限制字符个数

    <script> $(document).ready(function () { //限制字符个数 $(".box-right .title a").each(func ...

  3. Maven配置与创建

    1.下载Maven工具 从maven官网下载:https://maven.apache.org/download.cgi apache-maven-x.x.x-bin.zip ,解压到指定目录,例如D ...

  4. 我的nodejs 快速入门

    每行以封号结尾(可有可无) 变量定义没有类型 都用var 或者直接const log打印:console.log(db); 内置属性这样写法:__filename.__dirname等 functio ...

  5. Hibernate -- 项目结构模型改造, 加 Utils 和 Dao层

    示例代码: App.java 模拟客户端 /** * 模拟客户端 */ public class App { @Test public void saveCustomer(){ CustomerDao ...

  6. jmeter-Foreach控制器与正则表达式

    使用正则表达式提取器匹配的id值有17个(参考上一篇) 如果我想对每个id值进行请求,这个时候就可以用到foreach控制器 添加 由于我正则表达式取值命名为orderid,这里就将orderid设置 ...

  7. JNI简单步骤01

    1.环境变量 1.1.相应的环境变量中,加入如下内容:(Windows) (1).ClASSPATH中输入 : ".;C:\Program Files\Java\jdk1.7.0_07\jr ...

  8. Win10/Server2016镜像集成离线补丁

    Win10镜像集成离线补丁 因为正常安装系统后再打补丁比较漫长,可以事先做好打过补丁的iso,备将来使用. 以管理员身份运行cmd,然后通过dism提取.挂载.集成补丁.保存install.wim镜像 ...

  9. java 数据库索引的注意事项

    索引缺点 1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert.update和delete.因为更新表时,不仅要保存数据,还要保存一下索引文件.2.建立索引会占用磁盘空间的 ...

  10. JavaScript中的两个“0” -0和+0

    JavaScript中的两个“0”(翻译)   本文翻译自JavaScript’s two zeros JavaScript has two zeros: −0 and +0. This post e ...