精华内容
下载资源
问答
  • 因此本文将结合一个具体的例子来介绍C语言中的二进制文件读写,这也是我自我学习的一个记录。 一、函数介绍 在本例中,我们尝试在一个文件中写入10个字节的数据,其中每个字节均为0xFF,然后我们再将数据读取出来...

    前言

    二进制文件的读写是程序员们经常会遇到的一个场景,难是不难,但如果不熟悉的话,等到要用的时候还是会着急忙慌的。因此本文将结合一个具体的例子来介绍C语言中的二进制文件读写,这也是我自我学习的一个记录。

    一、函数介绍

    在本例中,我们尝试在一个文件中写入10个字节的数据,其中每个字节均为0xFF,然后我们再将数据读取出来。为了完成这个任务,我们需要三个函数,我们一个个来看。

    • 第一个函数为fopen(),它的函数原型如下
    FILE *fopen(const char *__restrict__ _Filename, const char *__restrict__ _Mode)
    

    顾名思义,该函数用于打开一个文件,第一个参数代表文件名,第二参数代表访问模式,比如读r、写w,它的返回值是一个指针。(更多的访问模式本处就不一一列举了,大家可自行查阅)

    • 第二个函数为fwrite(),它的函数原型为
    size_t fwrite(const void *__restrict__ _Str, size_t _Size, size_t _Count, FILE *__restrict__ _File)
    

    该函数的作用是往文件中写入数据。__restrict__ _Str为写入数据块的首地址,参数_Size_Count决定了写入的数据长度,_Size是每个元素的长度,_Count是元素的个数,怎么理解呢,如下图所示,总数据被分为了3块,每块1个字节。

    1B1B1B

    __restrict__ _File就是我们使用fopen()之后得到的文件指针,我们通过它往文件里写数据。

    • 第三个函数为fread(),它的函数原型如下所示
    size_t fread(void *__restrict__ _DstBuf, size_t _ElementSize, size_t _Count, FILE *__restrict__ _File)
    

    该函数的作用是从文件中读取数据。参数的含义与fwrite()类似,第一个参数为目标地址,也就是你想把数据存在哪里,参数_ElementSize_Count__restrict__ _File的含义与fwrite()中的一样,只是__restrict__ _File指向的是你想读取的文件。

    二、代码

    有了上面的三个函数,我们就可以编写代码来实现我们的例程了。代码如下:

    #include<stdio.h>
    int main()
    {
    	// 文件指针pd
        FILE *pd = NULL;
        unsigned __int8 a[10];
        unsigned __int8 b[10];
        int i; 
        for (i = 0; i < 10; i++)
        {
            a[i] = 0xff;
        }
        
        // 写入二进制文件
        // 文件名:"test.bin", 访问方式:"wb"
        pd = fopen("test.bin", "wb");
        // 数据块首地址: "&a",元素大小: "sizeof(unsigned __int8)", 元素个数: "10", 文件指针:"pd"
        fwrite(&a, sizeof(unsigned __int8), 10, pd);
        fclose(pd);
    
        // 读取二进制文件
        // 文件名:"test.bin", 访问方式:"rb"
        pd = fopen("test.bin", "rb");
        // 数据块首地址: "&b",元素大小: "sizeof(unsigned __int8)", 元素个数: "10", 文件指针:"pd"
        fread(&b, sizeof(unsigned __int8), 10, pd);
        for (i = 0; i < 10; i++)
        {
            printf("b[%d] = 0x%x\n", i, b[i]);
        }
        fclose(pd);
    }
    

    生成test.bin文件后,我们可以用二进制查看工具看一下文件里的数据,看是不是和我们预期的一样。这里给大家推荐一个二进制文件查看器:
    Free Hex Editor Neo
    用它就可以打开我们的test.bin了。

    最后,欢迎大家交流指正~

    展开全文
  • C语言读写二进制文件的使用
  • 查找了比较多的资源, 发现没有办法把text 文件转成binary文件仅作为记录,不过这个例子可以去除换行符。#include#include#defineN255intmain(){chara[N];FILE*fp1,*fp2;fp1=fopen("test_seq.fa","r");fp2=fopen(...

    查找了比较多的资源, 发现没有办法把text 文件转成binary文件

    仅作为记录,不过这个例子可以去除换行符。#include 

    #include 

    #define N 255

    int main()

    {

    char a[N];

    FILE *fp1,*fp2;

    fp1=fopen("test_seq.fa","r");

    fp2=fopen("testSeq.dat","wb");

    /* input text file and output ASCII file no line delimiter*/

    if (NULL == fp1){

    return -1;

    }

    while(!feof(fp1)){

    if(feof(fp1)){

    break;

    }

    fscanf(fp1,"%s", a);

    //fwrite(a, strlen(a),1,fp2);

    fwrite(&a, sizeof(char), strlen(a) ,fp2);

    }

    fclose(fp1);

    fclose(fp2);

    return 0;

    }

    编译后, 程序读入test _ seq. fa

    输出是 testSeq. dat

    #include 

    #include 

    int main(void){

    int len=2048;

    char filename[20];

    char buff[10000];

    char hit[5];      // str for find

    FILE *fd;

    int i,j,flag=0,over=0;

    int max,readed;

    int count=0;

    //strcpy(&filename[0] , "test_seq.fa");  // file name

    strcpy(&filename[0] , "testSeq.dat");  // file name

    strcpy(&hit[0] , "agag");                   // sequence

    buff[0]=0x0;

    buff[1]=0x0;

    // open file

    if((fd = fopen(&filename[0] , "rb"))==NULL){

    printf("Error : Can not open file %s\n",&filename[0]);

    }

    // read content

    while(over != 1){

    readed = fread(&buff[2] , 1 , len , fd);

    if(readed 

    over=1;

    max=readed;

    }else{

    max=len;

    }

    for(i=0;i

    for(j=0;j<4;j++){

    if(hit[j] != buff[i+j]){

    flag=0;//

    break;

    }else{

    flag=1;//

    }

    }

    if(flag==1){

    count++;

    i+=j-1;

    }else{

    if(j==0){

    i+=(j);

    }else{

    i+=(j-1);

    }

    }

    }

    //

    buff[0]=buff[max];

    buff[1]=buff[max+1];

    }

    fclose(fd);

    printf("count:%d\n",count);

    }

    这个程序编译后 ,读入testSeq.dat , 统计其中的 agag 字符串的个数。

    二进制文件读取 参考

    原文:http://matrix6ro.blog.51cto.com/1746429/1943718

    展开全文
  • C语言二进制读写文件

    万次阅读 2018-09-13 19:50:34
    来源:我的博客站 OceanicKang |《C语言二进制读写文件》 一、二进制读写 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) - 读 size_t fwrite(void *ptr, size_t size, size_t ...

    来源:我的博客站 OceanicKang |《C语言之二进制读写文件》

    ###一、二进制读写

    • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) - 读
    • size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream) - 写
    参数含义
    ptr指向存放数据的内存块指针,该内存块的尺寸最小应该是 size * nmemb 个字节
    size指定要读取的每个元素的尺寸,最终尺寸等于 size * nmemb
    nmemb指定要读取的元素个数,最终尺寸等于 size * nmemb
    stream该参数是一个FILE对象的指针,指定一个待读取的文件流

    返回值:

    • 返回值是实际读取到的元素个数(nmemb)
    • 如果返回值比nmemb参数的值小,表示可能读取到文件末尾或者有错误发生(可以使用feof函数或ferror函数进一步判断)

    【注】文件是否以二进制形式打开并不影响二进制读写,或者说影响很小

    ###二、例子

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    // 定义时间结构体
    struct Date
    {
    	int year;
    	int month;
    	int day;
    };
    
    // 定义书籍结构体
    struct Book
    {
    	char name[40];
    	char author[40];
    	struct Date date;
    };
    
    int main(void)
    {
    	struct Book *book_for_write = (struct Book *)malloc(sizeof(struct Book));
    	struct Book *book_for_read = (struct Book *)malloc(sizeof(struct Book));
    	if (book_for_write == NULL || book_for_read == NULL) {
    		
    		perror("申请内存失败!");
    		exit(EXIT_FAILURE);
    		
    	}
    	
    	FILE *fp;
    	
    	// 写入 ************************************/
    	struct tm *ptime;
    	time_t t;
    	time(&t);
    	ptime = localtime(&t);
    	
    	strcpy(book_for_write -> name, "《书籍名称》");
    	strcpy(book_for_write -> author, "OceanicKang");
    	book_for_write -> date.year = 1900 + ptime -> tm_year;
    	book_for_write -> date.month = 1 + ptime -> tm_mon;
    	book_for_write -> date.day = ptime -> tm_mday;
    	
    	if ((fp = fopen("./test.txt", "w")) == NULL) {
    		
    		printf("打开文件失败!");
    		exit(EXIT_FAILURE);
    		
    	}
    	
    	fwrite(book_for_write, sizeof(struct Book), 1, fp);
    	
    	fclose(fp);
    	
    	// 读取 ************************************/
    	if ((fp = fopen("./test.txt", "r")) == NULL) {
    		
    		perror("打开文件失败!");
    		exit(EXIT_FAILURE);
    		
    	}
    	
    	fread(book_for_read, sizeof(struct Book), 1, fp);
    	
    	printf("书名:%s\n", book_for_read -> name);
    	printf("作者:%s\n", book_for_read -> author);
    	printf("时间:%d-%d-%d\n", book_for_read -> date.year, book_for_read -> date.month, book_for_read -> date.day);
    	
    	fclose(fp);
    	
    	free(book_for_write);
    	free(book_for_read);
    
    	return 0;
    }
    
    
    展开全文
  • 1、fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio> 定义函数 FILE * fopen(const char * path,const char * mode); ...

    1、fopen(打开文件)

    相关函数

    open,fclose

    表头文件

    #include<stdio.h>

    定义函数

    FILE * fopen(const char * path,const char * mode);

    函数说明

    参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

    mode有下列几种形态字符串:

    r 打开只读文件,该文件必须存在。

    r+ 打开可读写的文件,该文件必须存在。

    w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

    a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

    上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。

    返回值

    文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。

    附加说明

    一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

    范例

    #include<stdio.h>

     

    main()

    {

    FILE * fp;

    fp=fopen("noexist","a+");

    if (fp= =NULL)

    return;

    fclose(fp);

    }

     

    2、fread(从文件流读取数据)

    相关函数

    fopen,fwrite,fseek,fscanf

    表头文件

    #include<stdio.h>

    定义函数

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

    函数说明

    fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

    返回值

    返回实际读取到的nmemb数目。

    附加说明

     

    范例

    #include<stdio.h>

    #define nmemb 3

    struct test

    {

    char name[20];

    int size;

    } s[nmemb];

     

    main()

    {

    FILE * stream;

    stream = fopen("/tmp/fwrite","r");

    fread(s,sizeof(struct test),nmemb,stream);

    fclose(stream);

    for (int i=0; i < nmemb; i++)

    printf("name[%d]=%-20s:size[%d]=%d/n", i, s[i].name, i, s[i].size);

    }

    执行

    name[0]=Linux! size[0]=6

    name[1]=FreeBSD! size[1]=8

    name[2]=Windows2000 size[2]=11

     

    3、fwrite(将数据写至文件流)

    相关函数

    fopen,fread,fseek,fscanf

    表头文件

    #include<stdio.h>

    定义函数

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

    函数说明

    fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。

    返回值

    返回实际写入的nmemb数目。

    范例

    #include<stdio.h>

    #define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}

    #define nmemb 3

    struct test

    {

    char name[20];

    int size;

    }s[nmemb];

     

    main()

    {

    FILE * stream;

    set_s(0,"Linux!");

    set_s(1,"FreeBSD!");

    set_s(2,"Windows2000.");

    stream=fopen("/tmp/fwrite","w");

    fwrite(s,sizeof(struct test),nmemb,stream);

    fclose(stream);

    }

    执行

    参考fread()。

    展开全文
  • C语言文件读写-二进制文件写操作 先说说什么是二进制文件二进制文件是相对于文本文件而言的,文本文件是由一行一行的字符的有序序列组成的。二进制文件就没有行的概念了,也是由有序的字符组成的,但是在写入数据...
  • C语言读写二进制文件

    2021-05-30 08:21:55
    读写文件 初始步骤 typedef struct { long n1; long n2; }Num; Num number1,number2 ; number1.n1 =10; number1.n2 =20; 向文件里面写入数据 FILE *file = fopen("number.txt","wb");//如果文件不存在,则...
  • C语言二进制方式读写文件数据

    千次阅读 2020-08-08 17:39:03
    fwrite(buffer, size, count,fp):以二进制的形式向指定的文件中写入若干数据项(由count决定),返回实际写入的数据项数目,各参数含义如下: buffer:一个存储区的起始地址,该地址开始的存储区的数据即是保存...
  • 相关函数open,fclose表头文件#include定义函数FILE * fopen(const char * path, const char * mode);函数说明参数path字符串包含欲打开...r+ : 打开可读写文件,该文件必须存在。w : 打开只写文件,若文件存在...
  • c语言读写二进制文件

    千次阅读 2018-12-31 16:58:53
    //读取文件写入文件 FILE* fp = fopen("D:\\software\\qt-opensource-windows-x86-mingw530-5.7.1.exe", "rb"); //获取文件的大小 if (!fp) { return -1; } FILE* fp2 = fopen("D...
  • C语言实现二进制文件读写

    千次阅读 2019-01-29 16:31:51
    C语言实现二进制文件读写
  • #include #include #define MAXLEN 1024int main(int argc, char *argv[]){if( argc < 3 ){printf("usage: %s %s/n", argv[0], "infile outfile");exit(1);}FILE * outfile, *infile;outfile = fopen(argv[2], "w...
  • 文章先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
  • //w会导致二进制文件写错误,遇到换行符0A会强制写成回车换行符0D0A c语言文件: fwrite(buffer,buffersize,count,file);//分别是要写进文件的地址,写入内容大小,写入次数,被写文件 eg: int * ints[]={1,2,...
  • 对于编程人员来说,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等。 具体分析如下: 一、哪种方式...
  • 0217C语言二进制文件读写(Binary I/O)实例作者:独木舟 日期:2012-02-17字体大小: 小 中 大 经常遇到这样的问题。由于二进制文件没有ASCII方式的直观性,所以读写时调试起来比较麻烦。用C语言读写文件的好处之一是比...
  • 我觉得,对于编程人员,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。具体的说:1。哪种方式...
  • fopen,fread,fwrite:二进制读写的顺序是用fopen二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中 #include <stdio.h> #include <stdlib.h> #define MAXLEN 1024 int...
  • C语言读写二进制文件文件的数据类型为float,废话少说,上代码:#include "opencv2/highgui/highgui.hpp"#include "opencv2/core/core.hpp"#include #include using namespace std;int main(){cv::Mat descr;...
  • #include #include typedef struct Node {int data;struct Node *next;} Node;void getInfo(Node * node);int printNodes(Node *node);void saveToFile(Node * node, char * filename);void readFromFile(char * fil...
  • ,打开文本文件(建立新文件)a追加(文本文件)rb只读(二进制文件)wb只写(二进制文件) 为输出数据,打开二进制文件(建立新文件)ab追加(二进制文件)r+读写w+读写为了读和写,建立一个文本文件a+读写为了读和写,打开一个...
  • 最近在做项目的时候遇到了这个问题,所以想着总结下,方法自己和有需要的朋友,下面这篇文章主要介绍了利用C/C++二进制读写png文件的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 掌握C语言二进制文件读写方式; 掌握CPP文本文件读写方式; 掌握CPP二进制文件读写方式; 二:C语言文本文件读写 1. 文本文件写入 //采用C模式对Txt进行写出 void TxtWrite_Cmode() { //准备数据 int index[50] ;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,854
精华内容 14,741
关键字:

以二进制读写文件c语言

c语言 订阅