我正在尝试使用Visual C++以二进制模式读取整个jpg文件。代码如下:
FILE *fd = fopen("c:\\Temp\\img.jpg", "rb");
if(fd == NULL) {
cerr << "Error opening file\n";
return;
}
fseek(fd, 0, SEEK_END);
long fileSize = ftell(fd);
int *stream = (int *)malloc(fileSize);
cout << fileSize << '\n';
fseek(fd, 0, SEEK_SET);
int bytes_read = fread(stream, fileSize, 1, fd);
printf("%i\n", bytes_read);
fclose(fd);
问题是
bytes_read
始终为1。fileSize
变量包含正确的文件大小。所以我不确定为什么bytes_read
总是1而不等于fileSize ..? 最佳答案
int n_read = fread(stream, fileSize, 1, fd);
返回您得到的大小为fileSize的块的数量。在这种情况下1。
查看C标准的7.21.8.1节:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf(第334页)
因此,您需要将
n_read
与fileSize
相乘以获取读取的字节数。关于c++ - 使用C++以二进制模式读取整个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9216031/