tempdir.cpp 838 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "tempdir.h"
  2. #include "dirut.h"
  3. #include <util/system/fs.h>
  4. #include <util/system/maxlen.h>
  5. TTempDir::TTempDir()
  6. : TTempDir(nullptr, TCreationToken{})
  7. {
  8. }
  9. TTempDir::TTempDir(const char* prefix, TCreationToken)
  10. : TempDir()
  11. , Remove(true)
  12. {
  13. char tempDir[MAX_PATH];
  14. if (MakeTempDir(tempDir, prefix) != 0) {
  15. ythrow TSystemError() << "Can't create temporary directory";
  16. }
  17. TempDir = tempDir;
  18. }
  19. TTempDir::TTempDir(const TString& tempDir)
  20. : TempDir(tempDir)
  21. , Remove(true)
  22. {
  23. NFs::Remove(TempDir);
  24. MakeDirIfNotExist(TempDir.c_str());
  25. }
  26. TTempDir TTempDir::NewTempDir(const TString& root) {
  27. return {root.c_str(), TCreationToken{}};
  28. }
  29. void TTempDir::DoNotRemove() {
  30. Remove = false;
  31. }
  32. TTempDir::~TTempDir() {
  33. if (Remove) {
  34. RemoveDirWithContents(TempDir);
  35. }
  36. }