笔者使用的是g++编译的,命令如下:
g++ --std=c++17 -lstdc++fs collect_jpgpng.cpp -o collect
然后运行:
./collect 被移动文件的目录 目标目录
完整代码如下:
#include<iostream>
#include<filesystem>
#include<vector>
#include<string>
namespace fs=std::filesystem;
using namespace std;
vector<fs::path> collect_files(string dir)
auto files=vector<fs::path>();
auto iterator=fs::directory_iterator(dir);
for(auto p:iterator)
auto file=p.path();
if(file.extension()==".png"||file.extension()=="jpg")
files.push_back(p.path());
return files;
void remove_files(vector<fs::path> files,string dir)
fs::path new_dir=fs::path(dir);
if(!fs::exists(dir))
fs::create_directory(new_dir);
for(auto p:files)
fs::path new_path=new_dir/p.filename();
fs::rename(p,new_path);
int main(int argc,char *argv[])
auto files=collect_files(argv[1]);
remove_files(files,argv[2]);
return 0;
功能: 给一个文件重命名用 法: int rename(char *oldname, char *newname);头文件:#include <stdio.h>说明:用该函数可以实现文件移动功能,把一个文件的完整路径的盘符改一下就实现了这个文件的移动。具体参见下面的程序示例说明。#include <stdio.h>int rename(const char *oldpath...
说明:C++访问文件夹中的内容没有python方便,这里做一下记录,提供实现数据从一个文件夹转移到另一个文件夹的接口。
应用场景:批量跑数据时,为了不在内部接口中输入当前数据的路径,避免层层传参数的麻烦,只在最里面的接口建一个临时文件夹,保存中间生成的文件,最后跳出最外层接口时,将临时文件夹里的内容全部复制到当前数据的路径下。
//将临时文件夹里的文件全部复制到相应数据的文件夹下面,并对临时文件夹进行清空处理,为下一套数据腾地方
void copy_file()
std::string s
需要C++ 17:右击 -> 属性 -> C/C++ -> Language参考:windows - How to use C++ to Copy A Directory - Stack Overflow
,最近正好又需要这样的功能,而且还增加了一个需求,希望能够记录移动的具体内容,并且能够根据记录实现恢复功能,这个实现起来没什么难度,唯一需要注意的是,记录需要加锁,并且考虑到程序崩溃等问题,需要将每次成功或者失败记录即时写入文件,而不能在程序结束时写入,否则程序一旦崩溃,所有的移动记录将丢失。于是我写了一个类,实现了文件和目录的移动,纯c++实现,可以记录移动过程,也有恢复功能呢,可以指定记录的文件名,默认为"restore.log"。注意,部分函数需要另外实现,实现起来也不难,欢迎交流与讨论。
inline bool isSpecialDir(const char *path)
return strcmp(path, "..") == 0 || strcmp(path, ".") == 0;
bool moveDir(const _tstring& srcPath, const _tstring& dstPath)
c++复制文件有多种方式,比如可以采用system输入dos命令,他会弹出终端窗口,或者通过
copyfile函数进行复制
if (!CopyFile(str + _T("\\data.fba"), __m_strPath + _T("\\data.fba"), FALSE))
::MessageBox(NULL, _T("安装过程失败"), NULL, NULL);
wstring strsavepath = lpOutPutDir;
strsavepath += L"classified";
string imgsavepath = StringConvert::ws2s(strsavepath);
const char* dir = imgsavepath.c_str();
if (_access(dir, 0) == -1)
_mkdir(dir);
for (int i = 0; i &l
#include "Shellapi.h"
#include "tchar.h"
#pragma comment(lib,"shell32.lib") //告诉编译器在编译形成的.obj文件和.exe文件中添加一条信息,使得连链接器在链接库时去直接找shell32.lib这个库,不要去找别的库
在相应的函数中添加如下代码
SHFILEOPSTRUCT fop;
fop.wFunc = F