đź“–
C++
  • 1. C++ Basics
    • 1.1 Input, Output, and Program Structure
      • 1.1.1 Welcome to Data Structures in C++
      • 1.1.2 Hello World
      • 1.1.3 Input and Output
      • 1.1.4 getline and cin
      • 1.1.5 Program Structure
    • 1.2 Basic Data Types
      • 1.2.1 Basic Data Types
        • 1.2.1.1 Differences between C++ and Java Data Types and Variables
      • 1.2.2 Strings and Characters
      • 1.2.3 Numbers
      • 1.2.4 Booleans
    • 1.3 Conditional Statements
      • 1.3.1 Conditional Statements
      • 1.3.2 Basic If/Else Statements
      • 1.3.3 Comparing Strings
      • 1.3.4 Logical Operators
    • 1.4 Loops
      • 1.4.1 Loops
      • 1.4.2 For Loops
      • 1.4.3 While Loops
      • 1.4.4 Searching a String
    • 1.5 Functions in C++
      • 1.5.1 Functions in C++
      • 1.5.2 Defining and Calling Functions
      • 1.5.3 Passing by Reference vs Value
      • 1.5.4 Function Prototypes
  • 2. Going Beyond the Basics
    • 2.1 Vector Basics
      • 2.1.1 Vector Basics
      • 2.1.2 Creating and Accessing Vectors
      • 2.1.3 Inserting into a Vector
      • 2.1.4 Looping Through a Vector
    • 2.2 Function Default Values
      • 2.2.1 Function Default Values
      • 2.2.2 Default Values
      • 2.2.3 Default Values with a Prototype
      • 2.2.4 Example: Splitting a String
    • 2.3 Structs
      • 2.3.1 Structs
      • 2.3.2 Defining and Accessing Structs
      • 2.3.3 Using Structs: Line Length
    • 2.4 File Input/Output
      • 2.4.1 File Input/Output
      • 2.4.2 Reading in a File
      • 2.4.3 Processing a File
      • 2.4.4 Writing to a File
      • 2.4.5 Creating an Input Stream from a String
    • 2.5 Error Handling
      • 2.5.1 Error Handling
      • 2.5.2 Validating a Number
      • 2.5.3 Validating a Vector Index
      • 2.5.4 Throwing Other Values
  • 3. Libraries
    • 3.1 Header Files
      • 3.1.1 Header Files
      • 3.1.2 Header File
      • 3.1.3 Header and Implementation File
      • 3.1.4 Safer Header
    • 3.2 Using Libraries
      • 3.2.1 Using a Utilities Library
      • 3.2.2 The Util Library
  • 4. 2D Vectors, Stacks, and Queues
    • 4.1 2D Vectors
      • 4.1.1 2D Vectors
      • 4.1.2 The 2D Vector
      • 4.1.3 Creating a 2D Vector
    • 4.3 Stacks
      • 4.3.1 Stacks
      • 4.3.2 Basic Stack
      • 4.3.3 Stack Example: Reverse a String
    • 4.5 Queues
      • 4.5.1 Queues
      • 4.5.2 Basic Queues
      • 4.5.3 Queue Example: Next in Line
  • 5. Sets and Maps
    • 5.1 Pairs and Iterators
      • 5.1.1 Pairs and Iterators
      • 5.1.2 Pairs
      • 5.1.3 Iterators
    • 5.3 Sets
      • 5.3.1 Sets
      • 5.3.2 Basic Sets
      • 5.3.3 Iterating Through a Set
      • 5.3.4 Sets of Struct Values
    • 5.4 Maps
      • 5.4.1 Maps
      • 5.4.2 Map Basics
      • 5.4.3 Iterating Through a Map
      • 5.4.4 Updating Maps
  • 6. Recursion
    • 6.1 Functional Recursion
      • 6.1.1 Functional Recursion
      • 6.1.2 Basic Recursive Problem: Exponential
      • 6.1.3 Recursion Example: Reverse String
      • 6.1.4 Recursion Example: Make Sum
    • 6.2 Procedural Recursion
      • 6.2.1 Procedural Recursion
      • 6.2.2 Print Binary
      • 6.2.3 Print Permutations
      • 6.2.4 Depth vs Breadth Search
  • 7. Pointers, Linked Lists, and Graphs
    • 7.1 Pointers
      • 7.1.1 Pointers
      • 7.1.2 Assigning and Updating Pointers
      • 7.1.3 Pointers and Functions
      • 7.1.4 Pointers and Data Structures
    • 7.2 Linked Lists
      • 7.2.1 Linked Lists
      • 7.2.2 Basic Linked List
      • 7.2.3 Linked List and Recursion
      • 7.2.4 Example: Sorted Phone Book
      • 7.2.5 Doubly Linked List
    • 7.3 Graphs
      • 7.3.1 Graphs
      • 7.3.2 Basic Example: Breadth First Search
      • 7.3.3 Application: Connecting Cities
Powered by GitBook
On this page
  • Creating an Input File Stream
  • Reading From The File
  • Reading In The Entire File
  • Try This Example
  1. 2. Going Beyond the Basics
  2. 2.4 File Input/Output

2.4.2 Reading in a File

The process of reading data from a file in C++ is similar to the process of reading data from the console. When you read data from the console, you essentially used the console stream as your input, then process the data. To read in data from a file, you replace that console stream with a file stream.

Creating an Input File Stream

Creating an input file stream is relatively straightforward in C++, but does require a few steps.

First, starting at the top of your program, you need to include fstream, the file stream library.

#include <fstream>

The fstream library is used for both input and output, but in this example you will be creating an input stream. To do that, you are going to create an input file stream using the variable type ifstream.

Start by declaring the variable, then use the open method to open a particular file. File names can be variables or string literals.

ifstream in;

in.open("openMe.txt");

In the example above, you create an input stream variable called in and use it to open the file named openMe.txt.

Unlike other languages such as Java, C++ does not require any error handling around opening a file. For now, you are going to add a check to print out if the file fails to load.

If the file does not load, your in variable will have a fail state that you can read:

if (in.fail())
    cout << "File didn't open"<<endl;

Reading From The File

Once the file stream has been opened, you are going to read each line of the file line by line. To do this, you use the same getline command you used to read in from the terminal. When reading in from the terminal, you specified cin as the input stream. Now you will specify the input stream variable as your input stream.

For example, if you use the in variable from about, you can read a line from the file with the following lines of code.

string line;
getline(in, line);

Recall how the getline command works. You pass an input stream and a variable and the getline command puts the next line from the input stream into that variable.

Reading In The Entire File

As mentioned above, when reading a file, you will read it line by line. The getline command above will help to read one line in, but to read an entire file you will need to loop through all the lines.

Since you don’t necessarily know how many lines are in the file, you will set up an infinite loop and then break out once there are no more lines. You will know that there are no more lines once your input stream fails.

Here is an example of a loop to process a file:

string line;
while (true) {
    getline(in, line);  
    if (in.fail()) break;

    // process line
}

Notice how the example uses a quick check for the fail state after reading in the line. If the file has no more lines, the input will fail and you will exit your loop. If it doesn’t fail, then you will have the next line in your line variable and can then process it as needed.

Previous2.4.1 File Input/OutputNext2.4.3 Processing a File

Last updated 3 years ago

Try This Example