2012-06-25 28 views
4

我需要從QProcess中運行下面的語句:QProcess中開始從標準輸入文件和stdout

programm <file1> file2 

在QT:

QProcess *proc = new QProcess; 
proc->setReadChannelMode(QProcess::SeparateChannels); 
proc->start("program < \"file1\" > \"file2\"", QIODevice::ReadWrite); 

但不知何故,這是行不通的。我在taskmanager中看到,該命令看起來是正確的,但看起來程序沒有任何參數就被執行了。我的錯誤在哪裏?

+0

'ReadWrite'爲默認模式,所以你不必指定它。 – leemes

回答

6

分別使用<分別讀取和寫入文件>是shell的語法功能。如果使用類似sh的外殼運行命令行programm <file1> file2,則命令program只會被執行,根本沒有參數。將給輸入和輸出的程序通道分配給給定文件與命令本身沒有任何關係。

QProcess可以告訴使用這些方法來模擬這種行爲:

QProcess::setStandardInputFile(QString fileName) QProcess::setStandardOutputFile(QString fileName)

所以,你的代碼就變成了:

QProcess *proc = new QProcess; 
proc->setReadChannelMode(QProcess::SeparateChannels); 
proc->setStandardInputFile("file1"); 
proc->setStandardOutputFile("file2"); 
proc->start("program"); 
+0

這很有趣!我已經嘗試過,但沒有奏效。 QProcess忽略文件的工作目錄。我必須用完整路徑指定它們。謝謝! – Oliver

+1

@Oliver注意工作目錄!=應用程序目錄。也許QProcess甚至使用其他目錄來查找文件... – leemes

相關問題