Is my code fine in the areas of read and write?
for (int i = 0; i &lt; package.size(); ++i)


I'd use for (auto&amp; p : package) instead if the index (i) is not used for anything.

outFile &lt;&lt; package[i].getPartId() &lt;&lt; "," &lt;&lt; endl;


Remember that std::endl flushes the stream. This is very minor, but I'd use a manual '\n' and then flush when the whole object is written.

bOutFile.write((char*)&amp;package[i], sizeof(package[i]));


This is I do not like at all. Copying objects like this is problematic when you have objects with more complex data. I.e. pointers or dynamically allocated memory.

Take a look at serialization/deserialization, I found this read quite good concerning the topic: https://rubentorresbonet.wordpress.com/2014/08/25/an-overview-of-data-serialization-techniques-in-c/

Packet(int partId, string description, double price, int partCount


Make the passed arguments const references instead! (Otherwise an extra copy will be done)