今天在用C++处理一个文件的时候,使用fopen_s打开文件
int err = fopen_s(&fp, XX_file_path.c_str(), "r");
文件打开以后,使用
read(&file_header, sizeof(XX结构体), 1, fp);
。。。
fseek(fp, XX_data_size, SEEK_CUR);
偏移后指针指向不对。
最终发现,问题出在文件打开的方式不对。
待处理的文件为一个二进制文件,故应使用“rb”而不能用“r”去读取文件,i.e.,
正确操作
int err = fopen_s(&fp, XX_file_path.c_str(), "rb");
之后文件读取便没有问题了,偏移后也能找到正确的数据。
【拓展阅读】
The differences between ‘r’ and ‘rb’ in the function fopen
link