С++ перенаправление файлов
Для более быстрого ввода я прочитал, что вы можете сделать file-redirection
и включить файл с уже установленными входами cin
.
Теория должна быть использована как следующая
App.exe inputfile outputfile
Насколько я понял в книге С++ Primer, следующий код С++ [1] должен читать cin
ввод из текстового файла и не должен нуждаться в каких-либо других специальных показаниях, таких как [2]
[2]
include <fstream>
ofstream myfile;
myfile.open ();
[1] Следующий код С++...
#include <iostream>
int main(){
int val;
std::cin >> val; //this value should be read automatically for inputfile
std::cout << val;
return 0;
}
Я что-то пропустил?
Ответы
Ответ 1
Чтобы использовать свой код [1], вы должны позвонить в свою программу следующим образом:
App.exe < inputfile > outputfile
Вы также можете использовать:
App.exe < inputfile >> outputfile
В этом случае вывод не будет переписываться с каждым запуском команды, но вывод будет добавлен к уже существующему файлу.
Подробнее о перенаправлении ввода и вывода в Windows вы можете найти здесь.
Обратите внимание, что символы <
, >
и >>
должны быть введены verbatim — они предназначены не только для целей презентации в этом объяснении. Итак, например:
App.exe < file1 >> file2
Ответ 2
В дополнение к первоначальному перенаправлению >
/>>
и <
Вы можете перенаправить 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);
}
Ответ 3
[Я просто объясняю аргумент командной строки, используемый в вопросе]
Вы можете указать имя файла в качестве ввода командной строки исполняемому файлу, но затем вам нужно открыть их в своем коде.
Как
Вы предоставили два аргумента командной строки: inputfile и 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;
}