通常我们需要保存中间结果时会传入一个已经存在的文件夹,因为如果文件夹不存在的话结果就会保存失败。
在保存前比较稳妥的做法就是在保存之前先判断文件夹是否存在,否则就直接创建
在C++中标准库中直接对目录操作的函数好像没有(本人目前没找标准库中有),所以使用系统平台函数来对文件夹进行操作比较方便。
系统函数在Windows和Linux系统有一定的区别,主要区别其实是在于Linux对于文件夹的权限设置有硬性要求,而Windows中就没有。
Windows下的函数
- 判断目录是否存在
#include <io.h> // 确定文件和文件夹是否存在和访问权限 (_AccessMode参数:00表示只判断是否存在,02表示文件是否可执行, 04表示文件是否可写,06表示文件是否可读),有指定访问权限则返回0,否则函数返回-1 int access( const char * _Filename, int _AccessMode)
- 创建文件夹
#include <direct.h> // 创建文件夹,返回0为创建成功,否则返回-1。 int mkdir(const char * _Path)
- 删除文件夹
#include <direct.h> // 删除文件夹,成功返回0,否则-1。 int rmdir(const char *_Path)
Linux下的函数
- 判断目录是否存在
#include <unistd.h> // 确定文件和文件夹是否存在和访问权限 (_AccessMode参数:00表示只判断是否存在,02表示文件是否可执行, 04表示文件是否可写,06表示文件是否可读),有指定访问权限则返回0,否则函数返回-1 int access( const char * _Filename, int _AccessMode)
- 创建文件夹
#include <sys/types.h> //或者 #include <sys/stat.h> // 创建文件夹,返回0为创建成功,否则返回-1。Linux中创建时会有权限要求,该权限参数可以去了解Linux对于文件权限的设置相关内容,例如:0777表示对文件具有完全的权限。 int mkdir(const char * _Path)
- 删除文件夹
#include <sys/types.h> //或者 #include <sys/stat.h> // 删除文件夹,成功返回0,否则-1。 int rmdir(const char *_Path)
boost库中的filesystem
#include<iostream>
#include<boost/filesystem.hpp>
const char dir_path[] = "../pic";
int main(int argc, char *argv[])
{
boost::filesystem::path dir(dir_path);
if(boost::filesystem::create_directory(dir)) {
std::cout << "Success" << "\n";
}
return 0;
}
获取当前时间
有时候我们想得到当前的系统时间来作为文件夹名,可使用如下代码:
string Get_Current_Date()
{
time_t nowtime;
nowtime = time(NULL); //获取日历时间
tm t;
char tmp[64];
localtime_s(&t, &nowtime);
strftime(tmp, sizeof(tmp), "%Y%m%d%H%M%S", &t);
return tmp;
}
参考链接: