File Input/Output Streams
C++ file streams are used for reading from and writing to files.
Why Programs Need File Streams
A program often needs to get information out of a file, put information into a file, or do both. Saved settings, a list of customer records, or the results of a calculation all live in files on disk, and a program has to move that data across the boundary between itself and the file. C++ handles this work through file streams. File streams are used for reading from and writing to files, so they are the tools a program uses to move data between itself and a file on disk.
What do you think happens?
Your program needs to pull the contents of a file into the program so it can work with them. Which stream type should you pick?
Reveal answer
ifstream
The source says ifstream is the stream type for reading from a file, supporting input operations. Its name comes from input, the direction in which data flows into the program. Reading a file so the program can use its contents is exactly the job ifstream matches.
Tracing Data Between Program and File
The most useful way to pick a file stream is to follow the data. Imagine the file on disk on one side and the running program on the other. Some tasks move data in one direction only, and some move it in both directions. A reading task carries information from the file into the program. A writing task carries information from the program out to the file. A task that needs both directions calls for the stream type the source names for combined input and output.
Read the diagram from the file outward. The ifstream path carries data into the program, the ofstream path carries data out of the program and into a file, and fstream sits on the combined path that handles both directions. Once you can name the direction a task needs, the stream type follows from it.
The Three Stream Types at a Glance
File streams do not all play the same role. The source identifies three types, and each one suits a different kind of job. Each is a stream object that a program can use with a file, and the name of each type hints at its job: ifstream is for input, ofstream is for output, and fstream is for both.
Choosing a Stream by Task
Choosing a stream type comes down to one question: what does the program need to do with the file? The source gives a direct mapping from job to type. Read the task, identify the direction of the data, and pick the matching stream. The comparison below lines up the three types against the job each one handles.
Picking a Stream for a Task
A program must load a list of names from a file so it can sort them in memory. Later, the same program must save a report of the sorted results to a new file. Which stream types does the program need?
- 1Identify the first job
Loading names from a file so the program can work with them is a task that pulls data from a file into the program. The source says ifstream matches that task.
- 2Identify the second job
Saving a report of the results to a new file records output and produces a file. The source says ofstream is the stream type that fits that task.
- 3Check whether one stream covers both
The two jobs happen as separate steps, each with a single direction of data. Neither step needs to read and write the same file, so the more specific types describe the work directly. fstream would be the choice if one file had to be read and written in the same stream.
The program uses ifstream to load the names and ofstream to save the report.
A Task That Needs Both Directions
A program must read a configuration file, change one value it finds there, and write the updated value back into that same file. Which stream type fits?
- 1Name the directions
The program reads from the file and also writes to it. Both directions apply to the same file.
- 2Match the combined job
The source states that fstream is the stream type for both reading from and writing to a file. A single ifstream or ofstream covers only one direction.
fstream is the stream type that matches this task.
Mistakes Beginners Make When Choosing a Stream
Common mistake Picking ofstream for a task that reads a file
What it looks likeA program needs to load a file of scores so it can compute an average, but the developer chooses ofstream because the file is involved.
Why it failsofstream is the stream type for writing to a file. It carries data out of the program and into a file, which is the opposite direction of the reading task.
Do this insteadName the direction first. If the file's contents must come into the program, pick ifstream.
Common mistake Picking ifstream for a task that records results
What it looks likeA program computes a total and must save it to a new file, but the developer chooses ifstream.
Why it failsifstream is for reading from a file. Saving results requires writing, which is the job the source assigns to ofstream.
Do this insteadWhen the task is to record results, save output, or produce a file, choose ofstream.
Common mistake Using fstream out of habit for every file task
Why it failsThe source does not say fstream replaces the other two in every case. It is the type identified for input and output together, so a single-direction task is described more precisely by ifstream or ofstream.
Do this insteadChoose fstream when the program must read and write, and use the more specific type when the job goes only one way.
Practice Matching Tasks to Streams
For each task, decide whether ifstream, ofstream, or fstream fits best. Task A: a program must read a file of student names into memory. Task B: a program must save a log of its actions to a file. Task C: a program must read a file, append a new line to it, and keep the file's existing contents in the same stream.
Hints
- Ask first whether data moves into the program, out of the program, or both ways.
- ifstream is for reading, ofstream is for writing, and fstream is for both.
- Task C requires both directions, so look for the stream type the source names for combined work.
Key Takeaways
- C++ file streams are used for reading from and writing to files, and they move data between a program and a file on disk.
- ifstream is the stream type for reading from a file, supporting input operations.
- ofstream is the stream type for writing to a file, supporting output operations.
- fstream is the stream type for both reading from and writing to a file, but it does not replace the other two in every case.
- To choose a stream, identify the direction the data must travel: into the program, out of the program, or both.