c语言文件读写(fread,fprintf)
Posted sysu_zjl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言文件读写(fread,fprintf)相关的知识,希望对你有一定的参考价值。
利用fread进行成块的文件读写
int fread(void *buf,int size,int count,FILE *stream)
int fwrite(void *buf,int size,int count,FILE *stream)
fread()函数从stream 指向的流文件读取count (字段数)个字段,每个字段为size(字段长度)个字符长,并把它们放到bu f(缓冲区)指向的字符数组中。
fread()函数返回实际已读取的字段数。若函数调用时要求读取的字段数超过文件存放的字段数,则出错或已到文件尾,实际在操作时应注意检测。
fwrite()函数从buf(缓冲区)指向的字符数组中,把count(字段数)个字段写到stream所指向的流中,每个字段为size个字符长,函数操作成功时返回所写字段数。
关于成块的文件读写,在创建文件时只能以二进制文件格式创建。
这里还用到fseek函数
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;
fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。
#include <iostream>
#include <cstdio>
#include <fstream>
int main(int argc, const char * argv[])
// insert code here...
FILE* fp = NULL;
FILE* fw = NULL;
char fname[200] = "train-images-idx3-ubyte";
char fwname[200] = "Minist.ds";
fp = fopen(fname, "r");
fw = fopen(fwname, "w");
if (!fp)
printf("I could not open %s.\\n", fname);
return 1;
else
fseek(fp, 16, SEEK_SET);
int d = 784;
unsigned char buffer[784];
int count = 0;
while (!feof(fp))
fread(buffer, d, 1, fp);
fprintf(fw, "%d", ++count);
for (int i = 0; i < d; i++)
fprintf(fw, " %d", (int)(buffer[i]));
fprintf(fw, "\\n");
return 0;
以上是关于c语言文件读写(fread,fprintf)的主要内容,如果未能解决你的问题,请参考以下文章
C语言如何用fread()和fwrite()实现对文本文件的整行读写呢,文本文件中每一行的字符个数不一定相同