namespace simgear
{
-Dir::Dir()
+Dir::Dir() :
+ _removeOnDestroy(false)
{
}
Dir::Dir(const SGPath& path) :
- _path(path)
+ _path(path),
+ _removeOnDestroy(false)
{
_path.set_cached(false); // disable caching, so create/remove work
}
Dir::Dir(const Dir& rel, const SGPath& relPath) :
- _path(rel.file(relPath.str()))
+ _path(rel.file(relPath.str())),
+ _removeOnDestroy(false)
{
_path.set_cached(false); // disable caching, so create/remove work
}
+Dir::~Dir()
+{
+ if (_removeOnDestroy) {
+ remove(true);
+ }
+}
+
+void Dir::setRemoveOnDestroy()
+{
+ _removeOnDestroy = true;
+}
+
Dir Dir::current()
{
#ifdef _WIN32
{
#ifdef HAVE_MKDTEMP
char buf[1024];
- char* tempPath = ::getenv("TMPDIR");
+ const char* tempPath = ::getenv("TMPDIR");
if (!tempPath) {
tempPath = "/tmp/";
}
{
public:
Dir();
-
+ ~Dir();
+
+ /**
+ * when this directory object is destroyed, remove the corresponding
+ * diretory (and its contents) from the disk. Often used with temporary
+ * directories to ensure they are cleaned up.
+ */
+ void setRemoveOnDestroy();
+
static Dir current();
/**
Dir parent() const;
private:
mutable SGPath _path;
+ bool _removeOnDestroy;
};
} // of namespace simgear