19#include "BDSException.hh"
20#include "BDSGlobalConstants.hh"
21#include "BDSTemporaryFiles.hh"
22#include "BDSUtilities.hh"
35 userSpecifiedTemporaryDirectory(
""),
36 temporaryDirectory(
""),
37 temporaryDirectorySet(false),
48 std::string workingDirTemp = bdsimExecDir +
"temp/";
49 std::vector<G4String> dirsToTry = {
"/tmp/",
"/temp/", workingDirTemp};
59 for (
const auto& dir : dirsToTry)
65 G4String templateDir = dir +
"bdsim_XXXXXX";
66 std::vector<char> v(templateDir.length() + 1);
67 std::strcpy(&v[0], templateDir.c_str());
70 char* newTempDirC = mkdtemp(pc);
72 {
throw BDSException(__METHOD_NAME__,
"Unable to create directory: " + templateDir);}
75 G4String newTempDir = G4String(newTempDirC);
87 G4cerr << __METHOD_NAME__ <<
"Could not create temporary dir in one of:" << G4endl;
88 for (
const auto& dir : dirsToTry)
89 {G4cerr << dir << G4endl;}
90 throw BDSException(__METHOD_NAME__,
"Required for operation.");
93 {G4cout << __METHOD_NAME__ <<
"Created temporary directory in: " <<
temporaryDirectory << G4endl;}
96BDSTemporaryFiles::~BDSTemporaryFiles()
105 G4cout << __METHOD_NAME__<<
"Removing temporary files" << G4endl;
112 G4cout <<
"Removing \"" << fn <<
"\"" << G4endl;
114 int result = remove(fn.c_str());
117 {G4cout <<
"Error deleting file: \"" << fn <<
"\"" << G4endl;}
126 G4cout << __METHOD_NAME__ <<
"Temporary files removed" << G4endl;
150 G4String fileNamePrefix,
151 G4String fileNameSuffix)
157 G4String fileName =
"";
160 G4String extension =
"";
163 if (!fileNamePrefix.empty() && (fileNamePrefix.back() !=
'_'))
164 {fileNamePrefix +=
"_";}
165 if (!fileNameSuffix.empty() && (fileNameSuffix.front() !=
'_'))
166 {fileNameSuffix =
"_" + fileNameSuffix;}
168 G4String newFileName =
temporaryDirectory + fileNamePrefix + name + fileNameSuffix + extension;
177 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()