C++文件重定向

zur*_*fyx 14 c++ file

为了更快地输入,我读到你可以做file-redirection并包含cin已设置输入的文件.

理论上它应该像下面这样使用

App.exe inputfile outputfile
Run Code Online (Sandbox Code Playgroud)

据我在C++ Primer一书中所理解,以下C++代码[1]应该cin从文本文件中读取输入,不需要像[2]这样的任何其他特殊指示

[2]

include <fstream>
ofstream myfile;
myfile.open ();
Run Code Online (Sandbox Code Playgroud)

[1]以下C++代码......

#include <iostream>
int main(){
    int val;
    std::cin >> val; //this value should be read automatically for inputfile
    std::cout << val;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

gaw*_*awi 17

要使用您的代码[1],您必须像这样调用您的程序:

App.exe < inputfile > outputfile
Run Code Online (Sandbox Code Playgroud)

您还可以使用:

App.exe < inputfile >> outputfile
Run Code Online (Sandbox Code Playgroud)

在这种情况下,输出不会在每次运行命令时重写,但输出将附加到现有文件.

有关在Windows中重定向输入和输出的更多信息,请参见此处.


请注意<,>和/ >>符号应逐字输入- 它们不仅仅用于本说明中的演示目的.所以,例如:

App.exe < file1 >> file2
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用`App.exe <inputfile >> outputfile`.注意额外的'>'.这样,新输出将附加到文件中,而不是删除它以前的内容. (5认同)

P0W*_*P0W 5

除了原始重定向>/ >><

您可以重定向std::cinstd::cout太.

如下:

int main()
{
    // Save original std::cin, std::cout
    std::streambuf *coutbuf = std::cout.rdbuf();
    std::streambuf *cinbuf = std::cin.rdbuf(); 

    std::ofstream out("outfile.txt");
    std::ifstream in("infile.txt");

    //Read from infile.txt using std::cin
    std::cin.rdbuf(in.rdbuf());

    //Write to outfile.txt through std::cout 
    std::cout.rdbuf(out.rdbuf());   

    std::string test;
    std::cin >> test;           //from infile.txt
    std::cout << test << "  "; //to outfile.txt

    //Restore back.
    std::cin.rdbuf(cinbuf);   
    std::cout.rdbuf(coutbuf); 

}
Run Code Online (Sandbox Code Playgroud)