スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

空白を含むパスをQtからexplorerのselectコマンドに指定できない

Windowsで、

explorer /select,c:\a\b.txt

のようなコマンドを実行すると、指定したファイルを選択した状態で、ファイルの所属フォルダで表示することができます。

このコマンドをつかって、アプリケーションから、たとえば現在編集しているファイルをエクスプローラで表示する機能をつくる
ことができます。

たとえば、Qtでこれを次のように実装してみます。

void ShowExplorer(QString filepath)
{
    QStringList opt;
    opt << QString("/select,") + filepath;

    QProcess::startDetached("explorer", opt);
}

この関数にファイルパスを指定してやると、そのファイルをエクスプローラで表示することができるのですが、
実は、この実装ではスペースを含むパスを指定することができません。

というのも、このexplorer /selectコマンドに対して空白を含むパスを指定する場合

explorer /select,"C:\a a\b.txt"

のように、ダブルクォーテーションを、「/select,」の後につける、という仕様になっているようなのですが、
QProcess::startDetachedでコマンドを実行する場合、スペースを含む引数にダブルクォーテーションを
つける場合には各引数の両端にしか設定できない仕様になっており、

explorer "/select,C:\a a\b.txt"

として指定することしかできないのですが、これではexplorerが/selectを認識できなくなってしまいます。

したがって、Qtを使っている場合で、explorer /selectを使うには、次のように、WindowsのAPIを直接呼び出してやる
必要があります。

void ExplorerCommand(QString opt)
{
    ShellExecuteW(
        NULL,
        NULL,
        L"explorer",
        opt.toStdWString().data(),
        NULL,
        SW_SHOWNORMAL);
}

void ShowExplorerFolder(QString filepath)
{
    ExplorerCommand(QString("/select,\"%1\"").arg(filepath));
}

スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。