This is my first question on StackOverflow so I apologize in advance if there is anything I am missing in my question or some rule I didn't follow. Please edit my question or tell me in the comments how I should improve my question, thank you.
I am trying to read a binary file into a std::vector<unsigned char> in C++ using std::ifstream. The problem is that it appears the file was read successfully, but the vector remains empty.
Here is the function that I used for reading the file:
void readFile(const std::string &fileName, std::vector<unsigned char> &fileContent)
{
std::ifstream in(fileName, std::ifstream::binary);
// reserve capacity
in.seekg(0, std::ios::end);
fileContent.reserve(in.tellg());
in.clear();
in.seekg(0, std::ios::beg);
// read into vector
in.read(reinterpret_cast<char *>(fileContent.data()), fileContent.capacity());
if(in)
std::cout << "all content read successfully: " << in.gcount() << std::endl;
else
std::cout << "error: only " << in.gcount() << " could be read" << std::endl;
in.close();
}
And this is how I called the function in main():
std::vector<unsigned char> buf;
readFile("file.dat", buf);
std::cout << "buf size: " << buf.size() << std::endl;
When I run the code, I get the following output:
all content read successfully: 323
buf size: 0
When I try to print the items in the vector like this:
for(const auto &i : buf)
{
std::cout << std::hex << (int)i;
}
std::cout << std::dec << std::endl;
I get empty output.
Things I have checked
file.datis in the same directory as the programfile.datis not empty
So, is there anything I did wrong? Why is the vector empty after reading?