您可以创建一个辅助函数来为您执行此操作,例如:
QString morphFile(QString s) {
if ((s == "~") || (s.startsWith("~/"))) {
s.replace (0, 1, QDir::homePath());
}
return s;
}
:
QFile vimRc(morphFile("~/.vimrc"));
QFile homeDir(morphFile("~"));
一个更完整的解决方案,也允许其他用户的主目录,可能是:
QString morphFile(QString fspec) {
// Leave strings alone unless starting with tilde.
if (! fspec.startsWith("~")) return fspec;
// Special case for current user.
if ((fspec == "~") || (fspec.startsWith("~/"))) {
fspec.replace(0, 1, QDir::homePath());
return fspec;
}
// General case for any user. Get user name and length of it.
QString name (fspec);
name.replace(0, 1, ""); // Remove leading '~'.
int len = name.indexOf('/'); // Get name (up to first '/').
len = (len == -1)
? name.length()
: len - 1;
name = name.left(idx);
// Find that user in the password file, replace with home
// directory if found, then return it. You can also add a
// Windows-specific variant if needed.
struct passwd *pwent = getpwnam(name.toAscii().constData());
if (pwent != NULL)
fspec.replace(0, len+1, pwent->pw_dir);
return fspec;
}
只需记住一件事,当前的解决方案不能移植到 Windows(根据代码中的注释)。我怀疑这对于直接的问题是可以的,因为这.vimrc
表明这不是您正在运行的平台(它_vimrc
在 Windows 上)。
为该平台定制解决方案是可能的,并且确实表明辅助功能解决方案非常适合,因为您只需更改一段代码即可添加它。