c++ - 从命令行 C++ 发送文本文件名
问题描述
我想运行我的代码并以两种方式发送我的文件
myprogram < input.txt
或者cat input.txt | myprogram
myprogram input.txt
我已经弄清楚了使用的 secong 方式argc
,argv[]
但我无法弄清楚如何为第一个选项编写代码。
int main (int argc, char *argv[])
{
ifstream fin;
if(argc > 1){
fin.open (argv[1]);
}
else
}
解决方案
如评论中所述,一种可移植的方式是传递打开的文件或std::cin
作为istream
对函数的引用并在那里进行输入。在这种情况下,文件或std::cin
可能会被传递。例如
#include <iostream>
#include <fstream>
#include <string>
void readinfo (std::istream& in)
{
std::string s;
while (in >> s)
std::cout << s << '\n';
}
int main (int argc, char **argv) {
if (argc > 1) { /* read from file if given as argument */
std::ifstream fin (argv[1]);
if (fin.is_open())
readinfo (fin);
else {
std::cerr << "error: file open failed.\n";
return 1;
}
}
else { /* read from stdin */
readinfo (std::cin);
}
return 0;
}
/dev/stdin
如果没有给出文件,则仅读取非便携式 Linux 选项只需要三元运算符,例如
std::ifstream fin (argc > 1 ? argv[1] : "/dev/stdin");
if (!fin.is_open()) {
std::cerr << "error: file open failed.\n";
return 1;
}
/* read from fin here */
两者都不是完全优雅的,但都支持(受操作系统约束)
myprogram < input.txt
或者
myprogram input.txt
推荐阅读
- sql-server - 如何用零填充数字?
- azure - vue 应用程序的 azure 管道不显示网页
- javascript - VueJS 各种元素列表
- c - 在我的 c 代码中,当我打印 k 时,它的打印 -4 但它必须是 -3 ?
- jpa - 在 JPA 中,事务何时开始有多重要?
- sql - Yii2:如何在 ActiveRecord 中使用子查询?
- linux - ./myShellScript 和 ~/myShellScript 有什么区别
- node.js - Firestore - 我可以像收集列表一样获取所有文档 ID 吗?
- api - 如何注册 Soundcloud API。当前接收错误
- r - ggplotly 和闪亮 - 顺序错误:参数 1 不是向量