krizzo
krizzo

Reputation: 1883

Reuse a filestream in C++?

I have a program that takes multiple files as input. What I'm trying to do is use the same filestream? I keep getting an error when trying to open the stream with the second file. Why is not code not valid and creating an error at compile time? argv[2] is a const char*.

error: no match for call to '(std::ifstream) (char*&)'

ifstream fin(argv[1]);
  //work with filestream
fin.close();

fin(argv[2]);
  //work with filestream
fin.close();

Upvotes: 1

Views: 430

Answers (2)

luke
luke

Reputation: 37493

The first line ifstream fin(argv[1]); is evoking ifstream's constructor, and the constructor can only be called once per object. Your code is trying to call it a second time. Try using open() instead:

fin.open(argv[2]);

As an aside, you may also want to call clear() before you reopen your ifstream. The reason for this is that if the first open() (or even close()) fails, error bits on the ifstream will be set, and won't be cleared by close().

Upvotes: 5

Andreas Brinck
Andreas Brinck

Reputation: 52549

Use a local scope:

{
  ifstream fin(argv[1]);
  //work with filestream
}

{

  ifstream fin(argv[2]);
  //work with filestream
}

Note that you dont manually need to close the streams, this is handled automatically when they go out of scope.

Upvotes: 2

Related Questions