将 linux 中标准输入的文件名通过管道传输到 C++
Piping filename from standard input in linux into c++
我希望能够在终端(如下所示)中编写一行,将同一目录中的文本文件输入到可执行文件中。
cat fileName | executable
我希望能够将文件名读入 C++ 代码。我已经有了访问行和读取文件的代码,它只是从标准输入接收文件名。
有没有一行代码或一个函数可以将文件名读入c++程序并将其存储为字符串?我目前正在使用下面的代码来阅读文本文件的每一行。
ifstream myfile;
myfile.open(fileName.c_str());
if( myfile.is_open() )
{
while ( getline (myfile ,line) )
{
......
}
}
当您执行 cat filename | executable
时,您发送的不是文件名,而是其内容。如果您想发送姓名,请使用 echo filename | executable
或 executable filename
。然后您可以像往常一样处理 argc
和 argv
,并执行您在示例代码中显示的正常文件读取。
您需要做的就是从标准输入读入一个变量(例如"fname"):
int main () {
string fname;
cin >> fname
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
为了适应 "pipe the name" 或 "use argc/argv"(正如许多 *nix 命令所做的那样):
int main (int argc, char *argv[]) {
string fname;
if (argc == 1) {
cin >> fname
}
else {
fname = argv[1];
}
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
你实际上不清楚,如果你想从 std::cin
读取文件,因为它是由
提供的
cat filename | executable
或者如果您实际上从 std::cin
.
获得要打开的文件名
您很可能想要一个可选的命令行参数(传递给 int main(int argc, char* argv[])
),并让您的阅读代码依赖于 std::istream
输入源,而不是 std::cin
或std::ifstream
硬编码。
我希望能够在终端(如下所示)中编写一行,将同一目录中的文本文件输入到可执行文件中。
cat fileName | executable
我希望能够将文件名读入 C++ 代码。我已经有了访问行和读取文件的代码,它只是从标准输入接收文件名。
有没有一行代码或一个函数可以将文件名读入c++程序并将其存储为字符串?我目前正在使用下面的代码来阅读文本文件的每一行。
ifstream myfile;
myfile.open(fileName.c_str());
if( myfile.is_open() )
{
while ( getline (myfile ,line) )
{
......
}
}
当您执行 cat filename | executable
时,您发送的不是文件名,而是其内容。如果您想发送姓名,请使用 echo filename | executable
或 executable filename
。然后您可以像往常一样处理 argc
和 argv
,并执行您在示例代码中显示的正常文件读取。
您需要做的就是从标准输入读入一个变量(例如"fname"):
int main () {
string fname;
cin >> fname
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
为了适应 "pipe the name" 或 "use argc/argv"(正如许多 *nix 命令所做的那样):
int main (int argc, char *argv[]) {
string fname;
if (argc == 1) {
cin >> fname
}
else {
fname = argv[1];
}
ifstream myfile;
myfile.open (fname);
if (myfile.is_open() ) {
while ( getline (myfile, line) ) {
...
你实际上不清楚,如果你想从 std::cin
读取文件,因为它是由
cat filename | executable
或者如果您实际上从 std::cin
.
您很可能想要一个可选的命令行参数(传递给 int main(int argc, char* argv[])
),并让您的阅读代码依赖于 std::istream
输入源,而不是 std::cin
或std::ifstream
硬编码。