C++中对文件夹的操作

Posted by hyang on May 27, 2019 Total views

通常我们需要保存中间结果时会传入一个已经存在的文件夹,因为如果文件夹不存在的话结果就会保存失败。

在保存前比较稳妥的做法就是在保存之前先判断文件夹是否存在,否则就直接创建

在C++中标准库中直接对目录操作的函数好像没有(本人目前没找标准库中有),所以使用系统平台函数来对文件夹进行操作比较方便。

系统函数在Windows和Linux系统有一定的区别,主要区别其实是在于Linux对于文件夹的权限设置有硬性要求,而Windows中就没有。

Windows下的函数

  1. 判断目录是否存在
    #include <io.h>
    // 确定文件和文件夹是否存在和访问权限 (_AccessMode参数:00表示只判断是否存在,02表示文件是否可执行, 04表示文件是否可写,06表示文件是否可读),有指定访问权限则返回0,否则函数返回-1
    int access( const char * _Filename,  int _AccessMode) 
    
  2. 创建文件夹
    #include <direct.h>
    // 创建文件夹,返回0为创建成功,否则返回-1。
    int mkdir(const char * _Path)
    
  3. 删除文件夹
    #include <direct.h>
    // 删除文件夹,成功返回0,否则-1。
    int rmdir(const char *_Path)
    

Linux下的函数

  1. 判断目录是否存在
    #include <unistd.h>
    // 确定文件和文件夹是否存在和访问权限 (_AccessMode参数:00表示只判断是否存在,02表示文件是否可执行, 04表示文件是否可写,06表示文件是否可读),有指定访问权限则返回0,否则函数返回-1
    int access( const char * _Filename,  int _AccessMode) 
    
  2. 创建文件夹
    #include <sys/types.h>
    //或者
    #include <sys/stat.h>
    // 创建文件夹,返回0为创建成功,否则返回-1。Linux中创建时会有权限要求,该权限参数可以去了解Linux对于文件权限的设置相关内容,例如:0777表示对文件具有完全的权限。
    int mkdir(const char * _Path)
    
  3. 删除文件夹
    #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;
}

参考链接:

  1. C++ 判断目录是否存在,新建,删除文件夹
  2. 创建文件夹或目录 c++
  3. C++ 创建文件夹的四种方式