c++17之后c++就已经支持文件系统操作了,用来解析目录方便很多。这里是自己写的一个例子,如果是gcc8,编译时需加-lstdc++fs。gcc9应该不用加了。但是都要开启 -std=c++17 。
代码
#include <stdio.h>
#include <string>
#include <filesystem>
int main()
{
namespace fs = std::filesystem;
auto picpath = fs::path("/data/newface/yll.jpg");
std::string stem = picpath.stem();
std::string extension = picpath.extension();
printf("stem:[%s], extension[%s]\n", stem.c_str(), extension.c_str()); //截取文件名和扩展名
auto parent_path = picpath.parent_path().string(); //文件的上层目录
auto filename = picpath.filename().string(); //文件名
auto new_path = picpath.parent_path().append("111.jpg");
printf("parent_path[%s], filename[%s], new_path[%s]\n", parent_path.c_str(), filename.c_str(), new_path.string().c_str());
bool has_pic = fs::exists(picpath) && fs::is_regular_file(picpath); //判断是否存在并且是普通文件
if (has_pic)
{
fs::copy_file(picpath, new_path); //复制一份
fs::remove(picpath); //删除文件
}
return 0;
}
编译命令:
gcc main.cpp -std=c++17 -lstdc++fs -lstdc++
执行输出:
stem:[yll], extension[.jpg]
parent_path[/data/newface], filename[yll.jpg], new_path[/data/newface/111.jpg]