在c ++中使用freopen打开多个文件

时间:2017-12-20 08:28:42

标签: c++ stdin freopen

我正在尝试多次使用freopen()来读取和关闭不同的文件。 所以这就是我在main函数中所做的:

if (argc != 5) {
    std::cerr << "Wrong format of arguments given." << endl;
    return -1;
}
std::string command, command2;
freopen(argv[1], "r", stdin);
// do something...
fclose(stdin);
freopen(argv[2], "r", stdin);
freopen(argv[3], "w", stdout);
while (std::cin >> command) {
    std::cin >> command2;
    // run some function...
}
fclose(stdin);
fclose(stdout);

但事实证明第一部分// do something...工作正常(从std::cin读取没有问题)但第二部分中的while循环似乎没有运行。 输入文件格式正确,所以我不知道为什么std::cin >> command返回false。

1 个答案:

答案 0 :(得分:1)

freopen(argv[2], "r", stdin);行中,您正尝试重新开启stdin。但在此之前,您已经在stdin行中关闭了fclose(stdin);同样stdin现在在关闭文件之后悬挂指针。

以下是www.cplusplus.com的摘录:

  

如果指定了新文件名,则该函数首先尝试关闭已与stream(第三个参数)关联的任何文件并取消关联。然后,无论该流是否成功关闭,freopen都会打开由filename指定的文件,并将其与流关联,就像fopen使用指定的模式一样。

关闭fopen()后,您应该使用stdin功能。