| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_FILES_SCOPED_TEMP_FILE_H_ |
| #define BASE_FILES_SCOPED_TEMP_FILE_H_ |
| |
| #include "base/base_export.h" |
| #include "base/files/file_path.h" |
| |
| namespace base { |
| |
| // An owned FilePath that's deleted when this object goes out of scope. |
| // Deletion is attempted on destruction, but is not guaranteed. |
| class BASE_EXPORT ScopedTempFile { |
| public: |
| // No file is owned/created initially. |
| ScopedTempFile(); |
| |
| ScopedTempFile(ScopedTempFile&&) noexcept; |
| ScopedTempFile& operator=(ScopedTempFile&&) noexcept; |
| |
| ~ScopedTempFile(); |
| |
| // The owned path must be empty before calling Create(). |
| // Returns true on success. |
| [[nodiscard]] bool Create(); |
| |
| // Returns true on success or if the file was never created. |
| [[nodiscard]] bool Delete(); |
| |
| // Attempts to delete the file. The managed path is reset regardless of |
| // if the deletion was successful. |
| void Reset(); |
| |
| [[nodiscard]] const base::FilePath& path() const { return path_; } |
| |
| // NOLINTNEXTLINE(google-explicit-constructor) |
| operator bool() const { return !path_.empty(); } |
| |
| private: |
| FilePath path_; |
| }; |
| |
| } // namespace base |
| |
| #endif // BASE_FILES_SCOPED_TEMP_FILE_H_ |