为了加快输入速度,我读到您可以执行file-redirection
并包含已设置cin
输入的文件。
理论上它应该像下面那样使用
App.exe inputfile outputfile
据我在C ++ Primer一书中所理解,以下C ++代码[1]应该从文本文件中读取cin
输入,不需要像[2]这样的任何其他特殊指示
[2]
include <fstream>
ofstream myfile;
myfile.open ();
[1]以下C ++代码......
#include <iostream>
int main(){
int val;
std::cin >> val; //this value should be read automatically for inputfile
std::cout << val;
return 0;
}
我错过了什么吗?
答案 0 :(得分:17)
要使用您的代码[1],您必须像这样调用您的程序:
App.exe < inputfile > outputfile
您也可以使用:
App.exe < inputfile >> outputfile
在这种情况下,输出不会在每次运行命令时重写,但输出将附加到现有文件。
有关在Windows中重定向输入和输出的详细信息,您可以找到here。
请注意,{em>逐字输入<
,>
和>>
符号 - 这些符号不仅仅用于演示目的。所以,例如:
App.exe < file1 >> file2
答案 1 :(得分:5)
除了原始重定向>
/ >>
和<
您也可以重定向std::cin
和std::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);
}
答案 2 :(得分:0)
[我只是在解释问题中使用的命令行参数]
您可以将文件名作为命令行输入提供给可执行文件,但是您需要在代码中打开它们。
像
您提供了两个命令行参数,即inputfile&amp; OUTPUTFILE
[App.exe inputfile outputfile
]
现在在你的代码中
#include<iostream>
#include<fstream>
#include<string>
int main(int argc, char * argv[])
{
//argv[0] := A.exe
//argv[1] := inputFile
//argv[2] := outputFile
std::ifstream vInFile(argv[1],std::ios::in);
// notice I have given first command line argument as file name
std::ofstream vOutFile(argv[2],std::ios::out | std::ios::app);
// notice I have given second command line argument as file name
if (vInFile.is_open())
{
std::string line;
getline (vInFile,line); //Fixing it as per the comment made by MSalters
while ( vInFile.good() )
{
vOutFile << line << std::endl;
getline (vInFile,line);
}
vInFile.close();
vOutFile.close();
}
else std::cout << "Unable to open file";
return 0;
}
答案 3 :(得分:0)
理解重定向的概念很重要。重定向会重新路由标准输入,标准输出和标准错误。
常见的重定向命令为:
dump-xml
将命令的标准输出重定向到文件,覆盖先前的内容。
>
$ command > file
将命令的标准输出重定向到文件,将新内容附加到旧内容。
>>
$ command >> file
将标准输入重定向到命令。
<
$ command < file
将命令的标准输出重定向到另一个命令。
|
$ command | another_command
将标准错误重定向到文件。
2>
$ command 2> file
$ command > out_file 2> error_file
将stderr重定向到与stdout重定向到的文件相同的文件。
2>&1
您可以结合重定向:
$ command > file 2>&1
即使这不是您的问题的一部分,当与重定向命令结合使用时,您还可以使用功能强大的其他命令: