二进制文件读取

时间:2012-02-29 11:01:34

标签: c fread fseek

我正在处理从二进制文件中读取数据的代码。代码在这里给出。请有人在这里告诉我fseek和fread的作用。

fc = fopen(CLOUDS_FILE, "rb");
if (fc == NULL){ fputs("File open error.\n", stderr); exit(1); }
crs = aux[CLRS];
fpos = (int) (pixel[2]*crs*crs + pixel[1]*crs + pixel[0]);
flsz = sizeof(fd);
fseek(fc, fpos*flsz, 0);
rd = fread((void *) &fd, flsz, 1, fc);
if (rd != 1){ fputs("Read error.\n", stderr); exit(1); }
fclose(fc);

4 个答案:

答案 0 :(得分:1)

fseek()更改文件偏移量。 fread()从当前偏移量开始读取数据,将偏移量增加读取的元素数量。

(或者完全是另外一个问题?我的意思是,上面是通过阅读联机帮助页可以轻易解决的问题)

答案 1 :(得分:1)

二进制文件读取是使用内部“指针”完成的,就像文本编辑器在编辑内容时具有光标位置一样。在读取模式下打开文件时(使用fopen),指针将位于文件的开头。读取操作(如fread,它将从流中读取指定数量的字节)开始读取指针位置,并且通常在指针完成时前进。如果只需要读取文件的特定部分,则可以手动将指针设置为某个(相对或绝对)位置,这就是fseek的用途。

答案 2 :(得分:0)

   #include <stdio.h>

   int fseek(FILE *stream, long offset, int whence);

fseek()函数设置流的文件位置指示符 流指出。获得以字节为单位的新位置 通过将偏移字节添加到whence指定的位置。如果是的话 设置为SEEK_SET,SEEK_CUR或SEEK_END,偏移量相对于 文件的开头,当前位置指示符或文件结尾, 分别。

   #include <stdio.h>

   size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

函数fread()读取数据的nmemb元素,每个字节大小 从流指向的流,将它们存储在位置 由ptr。

给出

答案 3 :(得分:0)

当然,fseek正在将文件中的“读取”索引转发到CLOUDS_FILE中的计算偏移量,而fread正在读取一个大小为sizeof(fd)的对象(无论fd是什么,因为它不在您的粘贴代码中) FD。