将带斜杠的 Unix 路径转换为 Windows 路径
Convert Unix path with slashes to Windows path
我正在尝试运行命令以打开explorer.exe
中的特定位置并选择特定文件:
QUrl url = QUrl::fromUserInput(file.absoluteFilePath());
QString str = "explorer.exe /select,"" + url.toString() + """;
system(str.toStdString().c_str());
这适用于Windows位置。
但是由于我也打开了来自 NAS 和 MAC 的位置,用户可以在那里创建文件夹,因此我对这样的文件夹有问题:
//NAS/FOLDER/With/BackSLASH/file.ext
由于在Mac上使用斜杠进行文件/文件夹命名,因此system()
功能无法识别它,因此QString
将其转换为U+002F
。
在Windows资源管理器中,它显示为:
文件夹•带•反斜杠
而且,如果我使用命令提示符导航到这样的文件夹,它会显示文件夹名称如下:
制作人手记 86
有没有人知道如何处理这种特殊情况或如何将此路径转换为可以作为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 在浏览器中选择指定的文件
您需要使用名为SHOpenFolderAndSelectItems()
的函数通过命令行调用explorer.exe
。 这是执行此操作的示例代码:
void BrowseToFile(LPCTSTR filename)
{
ITEMIDLIST *pidl = ILCreateFromPath(filename);
if(pidl) {
SHOpenFolderAndSelectItems(pidl,0,0,0);
ILFree(pidl);
}
}
希望这有帮助;干杯
Qt是一个多平台框架,所以你应该尽可能多地利用它。
有一个很好的API,可以为您做所有事情,而不会遇到这种复杂性:QDesktopServices::openUrl。
编辑: 根据评论,SO已经有一个解决方案。
- 如何转换真实路径 CString c++
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- 将带斜杠的 Unix 路径转换为 Windows 路径
- 如何将文件系统路径转换为字符串
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 如何将Qt文件路径从资源转换为绝对路径?
- 将 URI 转换为路径
- 如何将应用程序URI转换为普通文件路径
- 将 UNC 路径转换为网络系统的本地路径
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- Direct2D:将文本转换为路径
- 如何将路径存储在这种结构中,以及如何将其转换为其他内容
- 转换在路径和矩形中的工作方式不同
- 使用 SHGetPathFromIDList 将 PIDL 转换为文件路径
- 如何使用Qt / C++将GUI转换为Windows上的路径
- 将相对路径转换为完整路径的系统功能,即使对于不存在的路径也适用
- 将Mac和Linux上的相对路径转换为绝对路径
- 将硬盘卷路径转换为正常路径
- C++:如何将%USERPROFILE%路径转换为文件路径(应该适用于Windows XP及更高版本)
- Visual c++图像文件路径转换成xml