c++在Unix上读写文件

C++ Read/write file on Unix

本文关键字:读写 文件 Unix c++      更新时间:2023-10-16

我知道这是一个非常具体的问题。我在unix机器上使用g++编译器编译c++代码。我有以下一行代码来读取指定为c++参数的文本文件:test.cc

int main(int argc, char *argv[])
{
    ifstream inputfile(argv[1]);
}

现在用g++编译后,我将其命名为:

./test file.txt
但是如果我想把它命名为 我该怎么做呢
./test <file.txt

简而言之,我如何使用默认输入/输出

读取文件

您应该检查main的参数,看看是否有给定给程序的参数。如果是,那么你可以使用它作为文件,否则你使用std::cin

下面是一个例子:

void do_something(istream &input)
{
    // Read some stuff from the input
}
int main(int argc, char *argv[])
{
    if (argc == 1)
        do_something(cin);
    else if (argc == 2)
        do_something(ifstream(argv[1]));
    else
    {
        cout << "Error: Must supply a filen";
        return 1;
    }
}

我之所以调用另一个函数来读取和处理输入,是因为你不能赋值流,而必须使用引用或指针。将单独的任务放在单独的函数中也很好,因为这会增加代码的可读性。

当你想从标准输入中读取时,使用std::cin而不是打开你自己的流

例如:

std::string s;
std::getline(std::cin, s);

Using <将该文件重定向到stdin,这样您就可以通过c++中的std::cin获得它。>

您需要从stdin, da文件中读取。

即从键盘读取。

当你用管道输入内容时,它会像从键盘上输入一样被读取。

您可以执行大多数Unix命令所做的操作:如果指定了文件名,则从文件中读取。如果文件名缺失,则从标准输入中读取。

cin对象已经在iostream中定义。从cin而不是inputfile中读取

可能

ifstream &myin;
if (argc>1) {
   ifstream* inputfilep = new infstream(argv[1]);
   myin = *inputfile;
}
else myin = cin;
/* do your input on myin */

您将需要修改您的示例以检查argc以查看是否有任何命令行参数传入,因为shell剥离了输入重定向,因此如果argc为0,则根据其他示例从标准中读取,否则作为示例代码

你什么都不用做。就像从命令行读取一样编写程序。