将文件作为命令行c++的输入
Take file as an input from the command line c++
目前我有代码使用 cin 获取文件名,在程序执行时用作输入。我想要它,这样当我 运行 程序时,我可以添加文件重定向和文件名,并且 运行 这样:./a.out < file.txt。我如何使用重定向将我的文件输入到我的代码中。
这是我目前如何接受输入的示例:
int main(){
std::string filename;
std::cin >> filename;
std::ifstream f(filename.c_str());
}
这样做
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string line;
std::cout << "received " << std::endl;
while(std::getline(std::cin, line))
{
std::cout << line << std::endl;
}
std::cout << "on stdin" << std::endl;
}
由于在命令行上使用 <
,文件内容已在 stdin
上传递给您,因此您无需自己打开文件。
此代码有一个缺点,如果您不在 stdin
上输入任何内容,它就会冻结。检测 stdin
为空只能以不可移植的方式实现(参见 here)。
最好接受您的文件名作为普通命令行参数并在您的程序中打开它。
目前我有代码使用 cin 获取文件名,在程序执行时用作输入。我想要它,这样当我 运行 程序时,我可以添加文件重定向和文件名,并且 运行 这样:./a.out < file.txt。我如何使用重定向将我的文件输入到我的代码中。
这是我目前如何接受输入的示例:
int main(){
std::string filename;
std::cin >> filename;
std::ifstream f(filename.c_str());
}
这样做
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string line;
std::cout << "received " << std::endl;
while(std::getline(std::cin, line))
{
std::cout << line << std::endl;
}
std::cout << "on stdin" << std::endl;
}
由于在命令行上使用 <
,文件内容已在 stdin
上传递给您,因此您无需自己打开文件。
此代码有一个缺点,如果您不在 stdin
上输入任何内容,它就会冻结。检测 stdin
为空只能以不可移植的方式实现(参见 here)。
最好接受您的文件名作为普通命令行参数并在您的程序中打开它。