簡體   English   中英

從 C++ 中的外部文件輸入/輸出,無需在主文件中添加額外代碼

[英]Input/Output from external file in C++ without adding extra code into main file

如何在編譯/執行程序期間從文件( input.txt )獲取輸入並將 output 提供到另一個文件( output.txt )中,而無需向主文件添加額外的代碼。 我不想用

#ifndef ONLINE_JUDGE

或者

file.open("input.txt")

等等

我希望我的程序的行為如下所示。
在程序的編譯/執行過程中我應該添加什么來實現這一點?

主文件

#include <iostream>
using namespace std;

int main()
{
    string S;
    cin >> S;
    cout << S;
    return 0;
}

輸入.txt

Hello, World!

output.txt

Hello, World!

程序的標准輸入、標准 output 和標准錯誤流會發生什么與程序的構建設置無關。 它僅取決於父進程如何啟動程序。

當使用CreateProcess啟動子進程時,在lpStartupInfo參數中,您可以指定子進程的標准輸入、標准 output 和標准錯誤 stream 將從/到的管道傳輸。 例如,您可以指定 pipe 進出父進程。 然后,父進程可以對這些管道做任何它想做的事情。 例如,它可以將文件input.txt的內容輸入孩子的標准輸入,並將孩子的標准 output 的內容寫入文件output.txt 或者,父進程可以在創建子進程時簡單地將文件input.txtoutput.txt的文件句柄指定為標准輸入和標准 output 的句柄。 這樣,父進程就不必進行任何輸入和 output 自己處理,因為一切都將由操作系統處理。

有關詳細信息,請參閱 Microsoft 官方文檔中的以下頁面:

使用重定向輸入和 Output 創建子進程

但是,這並不一定意味着您必須編寫自己的程序來充當父進程。 Windows 命令行 Shell ( cmd.exe ) 可以為您執行此操作。 您可以執行您的程序並指定標准輸入和標准 output 應該被重定向,通過以下方式調用您的程序:

myprogramname.exe <input.txt >output.txt

That way, the Windows Command Line Shell ( cmd.exe ) will call CreateProcess for you and attach the appropriate file handles to standard input and standard output.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM