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()实现对文本文件的整行读写呢,文本文件中每一行的字符个数不一定相同

c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

C 语言文件操作 ( fwrite 函数 )

C语言文件操作详解

C语言文件操作详解

C语言进阶文件操作