1. 程式人生 > >boost之判斷資料夾/檔案是否存在

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/)這位兄臺寫的一句話吧!

希望大家能把自己的所學和他人一起分享,不要去鄙視別人索取時的貪婪,因為最應該被鄙視的是不肯分享時的吝嗇。