将带有斜杠的Unix路径转换为Windows路径

时间:2018-08-29 22:53:05

标签: c++ windows qt unix

我正在尝试运行命令以打开explorer.exe中的特定位置并选择特定文件:

QUrl url = QUrl::fromUserInput(file.absoluteFilePath());
QString str = "explorer.exe /select,\"" + url.toString() + "\"";
system(str.toStdString().c_str());

这适用于Windows位置。

但是由于我也可以从NAS和MAC用户打开位置,因此可以在其中创建文件夹,所以我遇到了这样的文件夹问题:

  

// NAS / 文件夹/具有/ BackSLASH /file.ext

由于在Mac上可以使用斜杠来命名文件/文件夹,因此system()功能无法识别斜杠,并且QString将其转换为U+002F

在Windows资源管理器中,它显示为:

  

文件夹•带有•BackSLASH

,并且,如果我使用命令提示符导航到这样的文件夹,它将显示以下文件夹名称:

  

生产者注释86

有人知道如何处理这种特殊情况或如何将此路径转换为可以作为explorer.exe的参数传递的路径吗?

/ *编辑08/31/2018 * /

我将代码更改为:

#include <Shlobj.h>
#include <atlstr.h>
void exportManager::BrowseToFile(QString filename)
{
TCHAR tchar[512];
USES_CONVERSION;
_tcscpy(tchar, A2T(filename.toStdString().c_str()));

ITEMIDLIST *pidl = ILCreateFromPath(tchar);
 if (pidl) {
    SHOpenFolderAndSelectItems(pidl, 0, 0, 0);
    ILFree(pidl);
 }
}
....
QString path = qFile.absoluteFilePath();
BrowseToFile(path.replace('/', '\\'));

但这仍然不能解决文件夹/文件名中的反斜杠和斜杠的问题。 似乎转换“ filename.toStdString()。c_str()”会导致问题。

如果我打印(qDebug())的路径,则如下所示: // NAS /文件夹\ uF022With \ uF022BackSLASH / file.ext

我找到了这个问题,并解决了我的问题。 QDesktopServices::openUrl with selecting specified file in explorer

2 个答案:

答案 0 :(得分:0)

您需要使用名为SHOpenFolderAndSelectItems()的函数通过命令行调用explorer.exe。 这是这样做的示例代码:

void BrowseToFile(LPCTSTR filename)
{
    ITEMIDLIST *pidl = ILCreateFromPath(filename);
    if(pidl) {
        SHOpenFolderAndSelectItems(pidl,0,0,0);
        ILFree(pidl);
    }
}

希望这项帮助;欢呼

答案 1 :(得分:0)

Qt是多平台框架,因此您应该尽可能地利用它。

有一个不错的API,它可以为您做所有事情而不会带来任何复杂性:QDesktopServices::openUrl


编辑: 基于评论there is already a solution on SO for that