1 #pragma once 2 3 #include <filesystem> 4 #include <utility> 5 6 namespace openpower::util 7 { 8 9 namespace fs = std::filesystem; 10 11 /** 12 * @class TemporaryFile 13 * 14 * A temporary file in the file system. 15 * 16 * The temporary file is created by the constructor. The absolute path to the 17 * file can be obtained using getPath(). 18 * 19 * The temporary file can be deleted by calling remove(). Otherwise the file 20 * will be deleted by the destructor. 21 * 22 */ 23 class TemporaryFile 24 { 25 public: 26 // Specify which compiler-generated methods we want 27 TemporaryFile(const TemporaryFile&) = delete; 28 TemporaryFile(TemporaryFile&&) = delete; 29 TemporaryFile& operator=(const TemporaryFile&) = delete; 30 31 /** 32 * Constructor. 33 * 34 * Creates a temporary file in the temporary directory (normally /tmp). 35 * 36 * Throws an exception if the file cannot be created. 37 */ 38 TemporaryFile(); 39 40 /** 41 * Destructor. 42 * 43 * Deletes the temporary file if necessary. 44 */ ~TemporaryFile()45 ~TemporaryFile() 46 { 47 try 48 { 49 remove(); 50 } 51 catch (...) 52 { 53 // Destructors should not throw exceptions 54 } 55 } 56 57 /** 58 * Deletes the temporary file. 59 * 60 * Does nothing if the file has already been deleted. 61 * 62 * Log error message if an error occurs during the deletion. 63 */ 64 void remove(); 65 66 /** 67 * Returns the absolute path to the temporary file. 68 * 69 * Returns an empty path if the file has been deleted. 70 * 71 * @return temporary file path 72 */ getPath() const73 const fs::path& getPath() const 74 { 75 return path; 76 } 77 78 private: 79 /** 80 * Absolute path to the temporary file. 81 * 82 * Empty when file has been deleted. 83 */ 84 fs::path path{}; 85 }; 86 87 } // namespace openpower::util 88