标题说明了一切。我已经看到很多解决方案来执行oposite操作,但不是这样。
我使用Qt创建临时文件。如果我得到它的名字,它将是类似的东西:
QTemporaryFile tempFile;
tempFile.open();
qDebug() << tempFile.fileName();
// C:/Users/USERNA~1/AppData/Local/Temp/qt_temp.Hp4264
我尝试了一些解决方案,例如使用QFileInfo:
QFileInfo fileInfo(tempFile);
qDebug() << fileInfo.filePath()
和QDir:
QDir dir(tempFile.fileName());
qDebug() << dir.absolutePath();
没有成功。
有没有使用纯Qt的解决方案?我知道我可以浏览目录树以查找全名,但我试图避免这种情况,特别是因为两个文件夹可能具有相同的前缀。
答案 0 :(得分:3)
win32函数GetLongPathName是您的答案。
QString shortPath = tempFile.fileName();
int length = GetLongPathNameW(shortPath.utf16(),0,0);
wchar_t* buffer = new wchar_t[length];
length = GetLongPathNameW(shortPath.utf16(), buffer, length);
QString fullpath = QString::fromUtf16(buffer, length);
delete[] buffer;
没有纯粹的Qt功能,因为只有这样做(而且Qt是可移植的)