我对如何使用fread()
感到困惑。以下是cplusplus.com
/* fread example: read a complete file */
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE * pFile;
long lSize;
char * buffer;
size_t result;
pFile = fopen ( "myfile.bin" , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
/* the whole file is now loaded in the memory buffer. */
// terminate
fclose (pFile);
free (buffer);
return 0;
}
假设我还没有使用fclose()
。我现在可以将buffer
视为数组并访问buffer[i]
之类的元素吗?或者我还需要做其他事情吗?
答案 0 :(得分:3)
当然,当你调用fread
时,你可以将数据实际复制到缓冲区内。您可以安全地关闭文件,并使用缓冲区本身执行任何操作。
如果您询问是否可以通过修改缓冲区和原始文件来访问缓冲区,则答案为否,您必须通过在写入模式下打开文件并使用fwrite
来重新写入文件。
如果你有一个二进制文件,例如2个浮点数,1个int和16个字符的字符串,你可以很容易地定义一个结构
struct MyData
{
float f1;
float f2;
int i1;
char string[16];
};
直接阅读:
struct MyData buffer;
fread(&buffer, 1, sizeof(struct MyData), file);
.. buffer.f1 ..