2013-03-08 148 views
-1

我試圖重定向.txt的內容,以.EXEDEVC++輸入不起作用

的Program.exe < file.txt的

和file.txt的內容是

35345345345 
34543534562 
23435635432 
35683045342 
69849593458 
95238942394 
28934928341 

但數組中的第一個索引是文件路徑,並且不顯示文件內容。

int main(int argc, char *args[]) 
    { 
    for(int c = 0; c<argc; c++){ 
      cout << "Param " << c << ": " << args[c] << "\n"; 
    } 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

所需的輸出:

Param0: 35345345345 
Param1: 34543534562 
Param2: 23435635432 
Param3: 35683045342 
Param4: 69849593458 
Param5: 95238942394 
Param6: 28934928341 
+2

你能顯示你的代碼嗎? – 2013-03-08 23:45:00

+0

很難說沒有看到該程序的來源,你可以添加到該問題? – fvu 2013-03-08 23:46:00

+0

編輯,包括src。 – 2013-03-08 23:47:32

回答

4

myapp < file.txt語法傳遞給stdin(或cin如果你願意),而不是爭論。

+0

嗯。我懂了。是否有可能改變行爲? – 2013-03-08 23:52:47

+0

你在用什麼外殼?看到medgno的回答。 – Barmar 2013-03-08 23:54:34

+0

@FábioSilva:沒有。 – Dave 2013-03-08 23:58:40

0

當你說「但在數組中的第一個索引文件路徑和不顯示文件內容。」這聽起來像你正在嘗試從argv和argc讀取輸入。角支架殼操作員不會那樣工作。相反,stdin(cin和幾個C函數讀取的內容)具有該文件的內容。所以,要從上面的案例中讀取文件,你需要使用cin。

如果你改爲真的想把文件自動插入參數列表中,我不能幫你用windows shell。但是,如果你有使用bash的選項,下面的工作:

program.exe `cat file.txt` 

反引號運算符擴展到包含在該命令的結果,然後這樣的內容作爲參數傳遞給PROGRAM.EXE傳遞(再次,在bash外殼,而不是Windows外殼程序)下

+0

謝謝。我正在使用Windows atm。順便說一句,這是有用的,因爲我大部分時間使用Linux。 – 2013-03-09 00:04:30

1

您誤解了argcargv的用途。它們包含程序的命令行參數。如果,例如,你跑:

program.exe something 123 

空終止字符串指向argvprogram.exesomething123

您正試圖使用​​< file.txt將文件的內容重定向到program.exe。這是而不是的一個命令行參數。它只是將文件的內容重定向到程序的標準輸入。要獲取這些內容,您需要從std::cin中提取。

0

這段代碼完成了我期望用另一個做的事情。謝謝每個人的幫助。

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
string line; 
while (getline(cin, line)) 
    cout << "line: " << line << '\n'; 
}