c++移动目录下的所有图片文件到另一目录下

前言

虽然c++学的很菜,但是还是得想办法用起来。这里我们将某一个目录下的所有图片文件移动到自己指定的另一个目录下,同理移动其他类型的文件可以更改一下文件后缀即可。

笔者将整个过程分成了两步:收集目录下的满足后缀条件的文件路径和移动文件到目标路径下。这里用的是标准库filesystem,代码也比较简单。

一.收集目录下的所有图片路径

我们使用directory_iterator拿出目录下的所有文件,然后根据文件的后缀判断是不是jpg或者png文件。然后将所有的jpg,png文件放入一个vector中,这样就收集完成了,代码如下:

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();
        //这里迭代拿出来的实际上是directory_entry对象
        //用directory_entry的帕特和方法即可转换到path对象
        if(file.extension()==".png"||file.extension()=="jpg")
            files.push_back(p.path());
    }

    return files;
}

有关path对象的可以看这篇博客:path对象

二.移动文件

第二步移动文件使用rename函数即可,代码如下:

void remove_files(vector<fs::path> files,string dir)
{
    fs::path new_dir=fs::path(new_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);
    }
}

这样我们就完成文件的移动了。

三.编译运行

笔者使用的是g++编译的,命令如下:

 g++ --std=c++17 -lstdc++fs collect_jpgpng.cpp -o collect

然后运行:

./collect 被移动文件的目录 目标目录

总结

完整代码如下:

#include
#include
#include
#include

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[])
{
    //argv[0]:source_dir,argv[1]:target_dir
    auto files=collect_files(argv[1]);
    remove_files(files,argv[2]);
    return 0;
}

你可能感兴趣的:(c++,c++,开发语言)