TemporaryDirectory::TemporaryDirectory(StringPiece namePrefix, fs::path dir, Scope scope) : scope_(scope), path_(generateUniquePath(std::move(dir), namePrefix)) { fs::create_directory(path_); }
TemporaryFile::TemporaryFile(StringPiece namePrefix, fs::path dir, Scope scope, bool closeOnDestruction) : scope_(scope), closeOnDestruction_(closeOnDestruction), fd_(-1), path_(generateUniquePath(std::move(dir), namePrefix)) { fd_ = open(path_.string().c_str(), O_RDWR | O_CREAT | O_EXCL, 0666); checkUnixError(fd_, "open failed"); if (scope_ == Scope::UNLINK_IMMEDIATELY) { boost::system::error_code ec; fs::remove(path_, ec); if (ec) { LOG(WARNING) << "unlink on construction failed: " << ec; } else { path_.clear(); } } }