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でビルドしてバッチファイルに保存すると、問題なく実行されます。
二重引用符を正しくエスケープする際に何か不足していますか?