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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值