version 3.10.0
PIDir::CurrentDirOverrider and PIDir::absolute
This commit is contained in:
@@ -184,6 +184,16 @@ PIString PIDir::relative(const PIString & path) const {
|
||||
}
|
||||
|
||||
|
||||
PIString PIDir::absolute(const PIString & path) const {
|
||||
PIFile::FileInfo fi(path);
|
||||
if (fi.isAbsolute()) return path;
|
||||
PIString ret = absolutePath();
|
||||
if (!ret.endsWith(separator) && !path.startsWith(separator)) ret += separator;
|
||||
PIDir td(ret + path);
|
||||
return td.cleanPath().path();
|
||||
}
|
||||
|
||||
|
||||
PIDir & PIDir::setDir(const PIString & path) {
|
||||
path_ = path;
|
||||
#ifdef WINDOWS
|
||||
@@ -547,3 +557,30 @@ bool PIDir::renameDir(const PIString & path, const PIString & new_name) {
|
||||
printf("[PIDir] renameDir(\"%s\", \"%s\") error: %s\n", path.data(), new_name.data(), errorString().data());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
PIDir::CurrentDirOverrider::CurrentDirOverrider(const PIString & path) {
|
||||
save(PIFile::fileInfo(path));
|
||||
}
|
||||
|
||||
|
||||
PIDir::CurrentDirOverrider::CurrentDirOverrider(const PIFile::FileInfo & info) {
|
||||
save(info);
|
||||
}
|
||||
|
||||
|
||||
void PIDir::CurrentDirOverrider::restore() {
|
||||
if (!active) return;
|
||||
active = false;
|
||||
PIDir::setCurrent(prev_cd);
|
||||
}
|
||||
|
||||
|
||||
void PIDir::CurrentDirOverrider::save(const PIFile::FileInfo & info) {
|
||||
prev_cd = PIDir::current().path();
|
||||
PIString p = info.isDir() ? info.path : info.dir();
|
||||
if (info.isAbsolute())
|
||||
PIDir::setCurrent(p);
|
||||
else
|
||||
PIDir::setCurrent(PIDir::current().path() + PIDir::separator + p);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user