boost之判断文件夹/文件是否存在

判断文件夹或者文件是否存在,如果不存在则新建文件夹,或者文件。

本代码只是单元测试版本,需要自己按需求写成函数。

#include <string>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>  // must include 

int main(int argc, char** argv)
{
  std::string test_dir = "/home/test";
  std::string test_file = test_dir + "/test.txt";

  if (!boost::filesystem::exists(test_dir))
  {
    std::cout << "test directory doesn't exist, creat it now" << std::endl;;
    if (!boost::filesystem::create_directories(test_dir))
    {
      std::cout << "can not create test directory!" << std::endl;;
    }
    else
    {
      std::cout << "create test directory successfully!" << std::endl;;
    }
  }
  if (!boost::filesystem::exists(test_file))
  {
    std::cout << "test file doesn't exist, create it now!" << std::endl;
    boost::filesystem::ofstream file(test_file);
    file.close();
    std::cout << "create test file successfully!" << std::endl;
  }

  return 0;
}

改进:由于boost::filesystem::exists(test_dir)该函数不区分文件夹还是文件,所以如果判断文件是否存在,还需要使用boost::filesystem::is_directory(test_dir).

加强版代码:

bool IsFileExistent(const boost::filesystem::path& path) {

    boost::system:error_code error;
    auto file_status = boost::filesystem::status(path, error);
    if (error) {
        return false;
    }

    if (! boost::filesystem::exists(file_status)) {
        return false;
    }

    if (boost::filesystem::is_directory(file_status)) {
        return false;
    }

    return true;
}

最后分享[我来乔23](https://www.cnblogs.com/MakeView660/)这位兄台写的一句话吧!

希望大家能把自己的所学和他人一起分享,不要去鄙视别人索取时的贪婪,因为最应该被鄙视的是不肯分享时的吝啬。

猜你喜欢

转载自www.cnblogs.com/ChrisCoder/p/10083352.html