20#include "BDSException.hh"
21#include "BDSGlobalConstants.hh"
22#include "BDSTemporaryFiles.hh"
23#include "BDSUtilities.hh"
36 userSpecifiedTemporaryDirectory(
""),
37 temporaryDirectory(
""),
38 temporaryDirectorySet(false),
49 std::string workingDirTemp = bdsimExecDir +
"temp/";
50 std::vector<G4String> dirsToTry = {
"/tmp/",
"/temp/", workingDirTemp};
60 for (
const auto& dir : dirsToTry)
66 G4String templateDir = dir +
"bdsim_XXXXXX";
67 std::vector<char> v(templateDir.length() + 1);
68 std::strcpy(&v[0], templateDir.c_str());
71 char* newTempDirC = mkdtemp(pc);
73 {
throw BDSException(__METHOD_NAME__,
"Unable to create directory: " + templateDir);}
76 G4String newTempDir = G4String(newTempDirC);
88 G4cerr << __METHOD_NAME__ <<
"Could not create temporary dir in one of:" << G4endl;
89 for (
const auto& dir : dirsToTry)
90 {G4cerr << dir << G4endl;}
91 throw BDSException(__METHOD_NAME__,
"Required for operation.");
94 {G4cout << __METHOD_NAME__ <<
"Created temporary directory in: " <<
temporaryDirectory << G4endl;}
97BDSTemporaryFiles::~BDSTemporaryFiles()
106 G4cout << __METHOD_NAME__<<
"Removing temporary files" << G4endl;
113 G4cout <<
"Removing \"" << fn <<
"\"" << G4endl;
115 int result = remove(fn.c_str());
118 {G4cout <<
"Error deleting file: \"" << fn <<
"\"" << G4endl;}
127 G4cout << __METHOD_NAME__ <<
"Temporary files removed" << G4endl;
151 G4String fileNamePrefix,
152 G4String fileNameSuffix)
158 G4String fileName =
"";
161 G4String extension =
"";
164 if (!fileNamePrefix.empty() && (fileNamePrefix.back() !=
'_'))
165 {fileNamePrefix +=
"_";}
166 if (!fileNameSuffix.empty() && (fileNameSuffix.front() !=
'_'))
167 {fileNameSuffix =
"_" + fileNameSuffix;}
169 G4String newFileName =
temporaryDirectory + fileNamePrefix + name + fileNameSuffix + extension;
178 G4cout <<
"New temporary file created: " << newFileName << G4endl;
General exception with possible name of object and message.
static BDSGlobalConstants * Instance()
Access method.
Holder for all temporary files created by BDSIM.
BDSTemporaryFiles()
Private default constructor as singleton.
G4bool temporaryDirectorySet
Whether directory has been set and made.
G4bool removeTemporaryFiles
Whether to clean up.
G4String temporaryDirectory
Directory all files will be placed in.
static BDSTemporaryFiles * instance
Singleton instance.
G4int unNamedFileCount
Count of unnamed files created.
static BDSTemporaryFiles * Instance()
Singleton accessor.
G4String CreateTemporaryFileUnnamed(const G4String &extension)
std::vector< G4String > allocatedFiles
Record of of all files allocated.
G4String userSpecifiedTemporaryDirectory
Optional user-specified path to try.
G4String CreateTemporaryFile(const G4String &originalFilePath, G4String fileNamePrefix="", G4String fileNameSuffix="")
void WarnOfNewFile(const G4String &newFileName)
User feedback that new file has been created.
void SplitFileAndExtension(const G4String &fileName, G4String &file, G4String &extension)
Split a filename.ext into filename and extension. Extension includes '.'.
G4bool DirectoryExists(const G4String &path)
Check if directory exists.
G4bool FileExists(const G4String &filename)
Checks if filename exists.
void SplitPathAndFileName(const G4String &filePath, G4String &path, G4String &filename)
std::string GetBDSIMExecPath()