您的位置:首页 > 编程语言 > C语言/C++

c语言文件读写(fread,fprintf)

2016-05-25 15:38 573 查看
利用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语言