2016-06-24 7 views
1

Code :: Blocksからプログラムをビルドして実行すると、完全に機能します。しかし、 "/ bin"フォルダから手動で実行すると、system()で "temp.bat"を呼び出そうとするとリセットされます。何故ですか? 依存する特定のファイルがないため、それ自体が作成されます。バッチ実行可能なストリームファイルでsystem()を呼び出すと、ウィンドウでプログラムがリセットされる

  ofstream filetmp1 ("temp1.bat", ios::out | ios::binary); 
       filetmp1 << "@echo off" << '\n'; 
       filetmp1 << "echo user xyz> script.dat" << '\n'; 
       filetmp1 << "echo xyz>> script.dat" << '\n'; 
       filetmp1 << "echo get conntest.test>> script.dat" << '\n'; 
       filetmp1 << "echo bye>> script.dat" << '\n'; 
       filetmp1 << "ftp -n -s:script.dat xyz.com" << '\n'; 
       filetmp1 << "del script.dat" << '\n'; 
       filetmp1.close(); 
       system ("temp1.bat");   //IF I REMOVE THIS LINE, THE PROGRAM WORKS HOW IT SHOULD, until the second system("temp1.bat") 
       system ("del temp1.bat"); 
       system ("cls"); 

    cout << "All data loaded!"; Sleep(1500); 
    system("cls"); 

    ofstream filetmp ("temp1.bat", ios::out | ios::binary); 
       filetmp << "@echo off" << '\n'; 
       filetmp << "echo user xyz> script.dat" << '\n'; 
       filetmp << "echo xyz>> script.dat" << '\n'; 
       filetmp << "echo cd app>> script.dat" << '\n'; 
       filetmp << "echo lcd data>> script.dat" << '\n'; 
       filetmp << "echo prompt n>> script.dat" << '\n'; 
       filetmp << "echo mput *.txt>> script.dat" << '\n'; 
       filetmp << "echo bye>> script.dat" << '\n'; 
       filetmp << "ftp -n -s:script.dat xyz.com" << '\n'; 
       filetmp << "del script.dat" << '\n'; 
       filetmp.close(); 
       system ("temp1.bat");    //WITH BOTH LINES REMOVED, IT WORKS. But I do not want to remove them, because I don't know alternative ways for them 
       system ("del temp1.bat"); 
       system ("cls"); 

私はすべての詳細を言ったと思う: はここにいくつかのコードです。前もって感謝します。

+0

この質問には実際に[mcve]が使用される可能性があります。 –

+1

@IsaacLymanありがとう、私はそれを改訂しました。 – Abso

+0

リセットで正確にはどういう意味ですか?また、削除呼び出しを取り出すと、temp1.batも作成されますか?もしそうなら、cmd.exeからtemp1.batを手動で実行できますか? –

答えて

0

"明示的にfflushまたは_flushallを使用してフラッシュするか、システムを呼び出す前にストリームを閉じる必要があります。" - MS Documentation

systemコール中に開いたままにする必要があるすべてのストリームをフラッシュしてみてください。 _flushall()が最も簡単です。

+1

もう一度ありがとうございます。 – Abso

+0

問題なしAbso :) –

関連する問題