The problem with reading files is that each file is different. Reading it has to be customized to the task or purpose of reading the file. This doesn't mean that you can't hide some of the tedious work in a custom class.
Since you are using C++, you can create a class that will help you. Your class will likely evolve over time, but you can use it to hide some of the mundane details.
You know you need to open a file. So the constructor might include opening the file and checking to be sure it was opened. Be sure the destructor closes and/or releases any file pointers and memory that you use when an object is created.
You can include different types of file I/O. You may want to make this part of the constructor set that opens the file. Use a structured interface that may stay the same outside of the class but can behave differently internally depending on the file type opened.
Be sure to use a structured approach to creating files. This makes reading them a bit easier. You have to be a bit more organized in the design but it makes writing the associated code easier.
Think about data separators. Commas , white space or other special characters may be used. End of lime terminators are also important depending on what type of line terminator you are dealing with. You may want to include terminator options.
You'll also want to consider different types of file I/O and how to handle them. Since you'll have a class object, you can hide all sorts of class details that change how your class works.
An example would be a file system I created for reading the equivalent of BASIC random access files for C. Instead of dealing with the work of creating new file handler, I created a set of functions that would deal with a file as a set of fixed length records. I only had to customize how each record was handled which hid most of the work of reading the file. You can do the same in C++ with several twists that are not as easy to do in C.
No matter what you do, there will be work involved with file I/O. Design your class so that you don't need to do as much work. As your class evolves, remember to take advantage of C++ features so that you don't break older code that uses your class.
Don't forget to take advantage of existing classes and functions to avoid re-inventing the wheel. Creating the file I/O class may actually change how you look at file I/O. You'll have to look at it much more in depth to create a good class that will actually help you.
Shadow Wolf