2013-11-05 90 views
1

我有這樣的代碼塊:用引號符號_popen工作正確

FILE * file = _popen("\"d:\\a b\\sql.exe\" \"d:\\a b\\la.db\"", "r"); 
_pclose(file); 

它不能正常工作,並返回結果:

 
'd:\a' is not recognized as an internal or external command, operable program or batch file. 

但是,當我更改報價「爲」在第二paramester =>這是確定的

 
\"d:\\a b\\la.db\"" => \'d:\\a b\\la.db\'" 
FILE * file = _popen("\"d:\\a b\\sql.exe\" \'d:\\a b\\la.db\'", "r"); 
_pclose(file); 

我想_popen像cmd.exe一樣工作。所以,我該如何處理這種情況。

回答

1

嘗試在空格前放一個反斜槓。我剛寫了這段代碼片段(我有一個名爲popen.exe的文件,它只是打印「測試」),它似乎工作。

#include <cstdio> 
#include <cstdlib> 

int main() 
{ 
    FILE * pFile; 
    char buffer[100]; 

    pFile = _popen("\"C:\\test\ 1\\popen.exe\"", "r"); 
    if (pFile == NULL) perror("Error opening file"); 
    else 
    { 
     while (!feof(pFile)) 
     { 
      if (fgets(buffer, 100, pFile) == NULL) break; 
      fputs(buffer, stdout); 
     } 
     _pclose(pFile); 
    } 
    return 0; 
} 
+0

是的,只要打開一個文件喜歡你的例子,它工作正常。 但是,如果您使用文件A打開文件B,則會導致錯誤。 – quanrock

+1

用引號將整個命令括起來 \t'pFile = _popen(「\」\「C:\\ test 1 \\ popen.exe \」\「C:\\ test 1 \\ popen.txt \」\ 「」,「r」);' –

+0

謝謝James.I試過了,它工作正常 – quanrock