将短/ dos样式路径名转换为完整路径名

时间:2014-05-27 12:39:30

标签: c++ qt

标题说明了一切。我已经看到很多解决方案来执行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的解决方案?我知道我可以浏览目录树以查找全名,但我试图避免这种情况,特别是因为两个文件夹可能具有相同的前缀。

1 个答案:

答案 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是可移植的)