It may look simple but I'm to find the reason why it's not working. I have two functions read_file_cpp() & write_file_cpp(). read_file_cpp() reads a file and stores it in unsigned char pointer & write_file_cpp() write back data from unsigned char pointer to the file.
But when I use basic_ifstream<unsigned char> or basic_ofstream<unsigned char> file streams, both the functions could not read/write data and contents of unsigned char pointers remains unchanged. Given below are code snippets :
int read_file_cpp(unsigned char *pInData,
int in_len,
string file_name) {
basic_ifstream<unsigned char> file_stream;
file_stream.open(file_name.c_str(),ios::in | ios::binary);
if (!file_stream.is_open()) {
cout << stderr << "Can't open input file !\n";
exit(1);
}
else{
file_stream.read(pInData,in_len);
}
file_stream.close();
return 0;
}
int write_file_cpp(string file_name,
unsigned char *pOutData,
int out_len) {
basic_ofstream<unsigned char> file_stream;
file_stream.open(file_name.c_str(),ios::out | ios::binary | ios::trunc);
if (!file_stream.is_open()) {
cout << stderr << "Can't open output file !\n";
exit(1);
}
else{
file_stream.write(pOutData,out_len);
}
file_stream.close();
return 0;
}
But when I use ifstream or ofstream and typecast to char pointer, both the functions work properly ,i.e.,
int read_file_cpp(unsigned char *pInData,
int in_len,
string file_name) {
ifstream file_stream;
file_stream.open(file_name.c_str(),ios::in | ios::binary);
if (!file_stream.is_open()) {
cout << stderr << "Can't open input file !\n";
exit(1);
}
else{
file_stream.read((char *)pInData,in_len);
}
file_stream.close();
return 0;
}
is working properly. Is there a way to make basic_ifstream<unsigned char> or basic_ofstream<unsigned char> work properly for unsigned char pointer types or to avoid typecast when ifstream or ofstream is used?