0

qprocessを使用してWindowsコマンドラインからcloc 1.62を正しく起動するのに問題があります。ここに私が持っているものがあります:

cloc が認識するすべての言語を含む QStringList。

QStringList languages;
languages<<"\"ABAP\""<<"\"ActionScript\""<<"\"Ada\""<<"\"ADSO/IDSM\""<<"\"AMPLE\""<<"\"Ant\""<<"\"Apex Trigger\"";                                    

次に、コンマで区切られたリストのすべての要素で構成される qstring を作成します。ただし、lang 変数に格納されるものは除きます。

QString langsinuse;

                 for (int i=0;i<languages.length();i++)
                 {
                     if (languages.at(i) != lang)
                     {
                         if (langsinuse.isEmpty())
                         {
                             langsinuse=langsinuse+languages.at(i);
                         }
                         else
                         {
                             langsinuse=langsinuse+','+languages.at(i);
                         }
                     }
                 }

次に、引数の文字列リストを作成し、プロセスを開始します。

QStringList arguments;
QProcess cloc;
QString params="cloc-1.62.exe --xml --by-file --report-file="+
list1.at(1).trimmed()+'/'+name+'/'+"report.xml"+" --exclude-lang="+langsinuse+" "+distr;
arguments<<"/k"<<params;
cloc.startDetached("cmd.exe",arguments,"cloc/");

しかし、どういうわけか、言語名のスペースはエスケープされたとは見なされず、スペースで区切られたすべての単語は cloc の異なるパラメーターと見なされます.エラーの。

(50 エラー:

読めません: Trigger","Arduino

読み取れません: Sketch"、"ASP"、"ASP.Net"、"Assembly"、"AutoHotkey"、"awk"、"Bourne)

これは、二重引用符で囲まれたスペースを含む言語の名前を --exclude-lang= オプションに入れなかった場合に発生するエラーです (たとえば、 --exclude-lang=Apex トリガーによってエラーが発生し、 --exclude- lang="Apex Trigger" はしません)

ただし、コマンド全体を保存するだけで、qtでビルドしてバッチファイルに保存すると、問題なく実行されます。

二重引用符を正しくエスケープする際に何か不足していますか?

4

1 に答える 1