精华内容
下载资源
问答
  • 编写一个二进制文件中读取服装信息的函数。 相关知识 打开文件 要二进制的方式操作文件,需要首先二进制的方式打开文件。二进制方式打开文件需要在打开方式中增加字符 b 即可。 例如: FILE *fp = fopen(...

    编写一个从二进制文件中读取服装信息的函数。

    相关知识

    打开文件

    要以二进制的方式操作文件,需要首先以二进制的方式打开文件。以二进制方式打开文件只需要在打开方式中增加字符 b 即可。
    例如:

    FILE *fp = fopen("a.dat", "rb");

    以上代码中文件的打开方式为 rb ,字符 r 表示打开的文件用于读,字符 b 表示以二进制的方式打开。

    读写文件

    打开文件后依然是文件读写。二进制文件的可以使用 fread 和 fwrite 函数。

    fwrite 函数

    函数 fwrite 的原型为:

    size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
    1. size_t 为类型 long 的别名。函数 fwrite 实现把内存中从指定位置开始的指定个数的字节以二进制的方式写入文件。
    2. 第一个参数 buffer 指向内存中要写入文件的数据的首地址。
    3. 第二个参数 size 是要写入文件的数据对象的大小,一般使用运算符
      sizeof 计算数据对象所占空间的字节数。
    4. 第三个参数是要写入的数据对象的个数。
    5. 第四个参数是文件指针,指向要写入数据的文件。函数fwrite 可以一次将从 buffer 开始的,size*count 个字节的数据写入指针 stream 指向的文件中。

    例如下面的程序可以将一个整数以二进制方式写入文件:

    int n = 100;
    FILE *fp = fopen("a.dat","wb");     // 打开二进制文件 a.dat 用于写
    fwrite(&n,sizeof(n),1,fp);     // 将 n 以二进制形式写入文件
    fread 函数

    函数 fread 的原型为:

    size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
    1. 与 fwrite 相反,函数 fread 的作用是从文件的当前位置读取指定字节数的数据放入到内存的指定位置。
    2. 第一个参数 buffer指向内存中要写入数据的位置。
    3. 函数 fread 的后 3 个参数与函数 fwrite 的后 3个参数的意义相同,给出了要读取数据对象的字节数、数目及被读取的文件。
    4. 函数 fread 可以从指定文件的当前位置一次性读取size*count 个字节的数据并存入 buffer 中。

    例如下面的程序可以将文件 fp 中当前位置的整数以二进制方式读出到变量 n 中:

    int n;
    FILE *fp = fopen("a.dat","wb");     // 打开二进制文件 a.dat 用于写
    fread(&n,sizeof(n),1,fp);

    此外,二进制文件的读写实际上是把数据原封不动的从文件搬到内存,或者从内存搬到文件。这里的原封不动是指数据的存储形式,即数据在内存中的0|1形式。
    而文本文件的读写则不是,需要做一些转换。
    例如把内存中的整数12以文本方式写入文件,12的存储格式为00000000 00000000 00000000 00001100,程序需要把这个数据转换成字符串"12"写入文件。

    关闭文件

    关闭文件函数和文本文件的关闭函数的使用事一样的,都是 fclose 函数。

    //test.cpp
    #include <stdio.h>
    //声明结构clothing
    struct clothing 
    {
     char label[12]; //编号
     float price;    //价格
    };
    //声明外部函数,函数readClothing在其它源文件中实现
    extern int readClothing(FILE *fp, clothing cloth[]);
    int main()
    {
     clothing t;
     int n,i;
     //输入服装信息,存入文件a.dat
     FILE *fp = fopen("a.dat","wb");  //打开二进制文件a.dat用于写
     scanf("%d",&n); //输入服装种数
     fwrite(&n,sizeof(n),1,fp); //将n以二进制形式写入文件
     for(i=0;i<n;i++)
     {
      scanf("%s %f",t.label,&t.price); //输入一种服装的编号和价格
      fwrite(&t,sizeof(t),1,fp); //将该服装信息以二进制形式写入文件
     }
     fclose(fp); //关闭文件
     //定义服装信息数组
     clothing cloth[100];
     //打开文件,以二进制方式打开用于读
     fp = fopen("a.dat", "rb");
     //从文件中读取服装信息到数组cloth中
     n = readClothing(fp, cloth);
     //关闭文件
     fclose(fp);
     //输出服装信息
     for(i=0;i<n;i++)
     {
      printf("%s %d\n",cloth[i].label,(int)cloth[i].price);
     }
     return 0;
    }
    //fileBin.cpp
    #include <stdio.h>
    // 结构clothing
    struct clothing 
    {
        char label[12];  // 编号
        float price;  // 价格
    };
    /* 
       函数readClothing:从文件fp中读取服装信息到cloth中
       参数fp:指向打开的二进制文件,cloth:存放读出的服装信息
       返回值:服装信息数量
       说明:文件中首先以二进制方式存入了一个整数(服装信息数n),然后以二进制方式存入n种服装信息(clothing类型)
    */
    int readClothing(FILE *fp, clothing cloth[])
    {
        int n;
        // 读一个整数(服装信息数)
        fread(&n,sizeof(n),1,fp);
        // 读出n种服装信息到cloth中
        fread(cloth,sizeof(clothing),n,fp);
        return n;\
    }
    展开全文
  • //只读方式打开一个二进制文件 if (!fpPhoto) { printf("打开文件失败!\n"); system("pause"); return -1; } else { printf("打开成功!\n"); fseek(fpPhoto, 3L, SEEK_SET); fread(&Exif, ...
  • C语言文件打开方式简介

    千次阅读 2016-09-06 23:07:54
    5、“rw”以只写方式打开一个二进制文件; 6、“ra”打开一个二进制文件追加; 7、"r+"以读写方式打开一个文件; 8、“w+”以读写方式建立一个文件; 9、“a+”以读写方式打开一个文件追加; 10、“rb+”以读写...

    1、“r”以只读方式打开一个文件;

    2、“w”以只写方式打开一个文件;

    3、“a”打开一个文件追加;

    4、“rb”以只读方式打开一个二进制文件;

    5、“rw”以只写方式打开一个二进制文件;

    6、“ra”打开一个二进制文件追加;

    7、"r+"以读写方式打开一个文件;

    8、“w+”以读写方式建立一个文件;

    9、“a+”以读写方式打开一个文件追加;

    10、“rb+”以读写方式打开一个二进制文件;

    11、“wb+”以读写方式建立一个二进制文件;

    12、“ab+”以读写方式打开一个二进制文件追加。

    ps:欢迎评论。

    展开全文
  • 文件使用方式  ...只读打开一个二进制文件,只允许读数据  “wb”  只写打开或建立一个二进制文件,只允许写数据  “ab”  追加打开一个二进制文件,并在文件末尾写数据  “rt+”  读
    文件使用方式 
    意义 
    “rt” 
    只读打开一个文本文件,只允许读数据 
    “wt” 
    只写打开或建立一个文本文件,只允许写数据 
    “at” 
    追加打开一个文本文件,并在文件末尾写数据 
    “rb” 
    只读打开一个二进制文件,只允许读数据 
    “wb” 
    只写打开或建立一个二进制文件,只允许写数据 
    “ab” 
    追加打开一个二进制文件,并在文件末尾写数据 
    “rt+” 
    读写打开一个文本文件,允许读和写 
    “wt+” 
    读写打开或建立一个文本文件,允许读写 
    “at+” 
    读写打开一个文本文件,允许读,或在文件末追加数据 
    “rb+” 
    读写打开一个二进制文件,允许读和写 
    “wb+” 
    读写打开或建立一个二进制文件,允许读和写 
    “ab+” 
    读写打开一个二进制文件,允许读,或在文件末追加数据

    对于文件使用方式有以下几点说明:
    1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
    r(read): 读
    w(write): 写
    a(append): 追加
    t(text): 文本文件,可省略不写
    b(banary): 二进制文件
    +: 读和写
    2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
    3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
    4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。
    5) 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:
    6) if((fp=fopen("c://hzk16","rb")==NULL)
    {
    printf("/nerror on open c://hzk16 file!");
    getch();
    exit(1);
    }

    这段程序的意义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:/ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。
    7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
    8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。
    展开全文
  • 打开文件的方式 含义 “r” 打开,只读 ...“wb” 打开一个二进制文件只写 “ab” 打开一个二进制文件,进行追加 “r+” 读/写方式打开一个已存在的文件 “w+” 读/写方式建立一个新的文本文件 “a+

    打开文件的方式
    含义

    w:表示fopen文件时会清空掉原文件(如果存在)的信息,并重新写入,在不fclose文件的情况下,多次fwrite也是追加写入到文件末尾的,不会覆盖之前fwrite的内容。

    a:表示fopen文件时会保留原文件(如果存在)的信息,并追加到末尾写入,每次fwrite写入到文件末尾。

    文本方式打开的文件具有一定的格式,说明读取时是要按照一定的编码规范来读取的,而二进制方式读取是直接从文件中读取包含0,1的二进制流,没有任何格式

    “r” 打开,只读
    “w” 打开,文件指针指到头,只写
    “a” 打开,指向文件尾,在已存在文件中追加
    “rb” 打开一个二进制文件,只读
    “wb” 打开一个二进制文件,只写
    “ab” 打开一个二进制文件,进行追加
    “r+” 以读/写方式打开一个已存在的文件
    “w+” 以读/写方式建立一个新的文本文件
    “a+” 以读/写方式打开一个文件文件进行追加
    “rb+” 以读/写方式打开一个二进制文件
    “wb+” 以读/写方式建立一个新的二进制文件
    “ab+” 以读/写方式打开一个二进制文件进行追加

    #define  _CRT_SECURE_NO_WARNINGS 
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    #include <Windows.h>
    typedef struct Teacher
    {
    	char name[64];
    	int age;
    }teacher;
    void fun_fwrite()//按块的方式写文件
    {
    	int my_count;
    	FILE* fp = NULL;//文件句柄,就是一个内存块的首地址
    	const char* filename = "C:/Users/ky/Desktop/3.txt";
    	Teacher tArray[3];
    	for (int i = 0; i < 3; i++)
    	{
    		sprintf(tArray[i].name,"%d%d%d", i + 1, i + 1, i + 1);
    		tArray[i].age = i + 31;
    		printf("%s\n", tArray[i].name);
    	}
    
    	fp = fopen(filename, "rb+");
    	if (fp == NULL)
    	{
    		printf("func fopen err\n");
    		return;
    	}
    	printf("func fopen right\n");
    
    	for (int i = 0; i < 3; i++)
    	{
    		my_count=fwrite(&tArray[i], sizeof(Teacher),1, fp);
    
    	}
    	
    	if (fp != NULL)
    	{
    		fclose(fp);
    	}
    }
    void fun_fread()//按块的方式读文件
    {
    	int my_count;
    	FILE* fp = NULL;//文件句柄,就是一个内存块的首地址
    	const char* filename = "C:/Users/ky/Desktop/3.txt";
    	Teacher tArray[3];
    
    	fp = fopen(filename, "rb+");//以二进制读写的方式打开文件
    	if (fp == NULL)
    	{
    		printf("func fopen err\n");
    		return;
    	}
    
    	printf("func fopen right\n");
    
    	for (int i = 0; i < 3; i++)
    	{
    		my_count = fread(&tArray[i], sizeof(Teacher), 1, fp);
    
    	}
    	for (int i = 0; i < 3; i++)
    	{
    		printf("name:%s, age:%d \n", tArray[i].name, tArray[i].age);
    	}
    
    	if (fp != NULL)
    	{
    		fclose(fp);
    	}
    }
    
    void fun_fpuc()//按照字符写文件
    {
    	FILE* fp = NULL;//文件句柄,就是一个内存块的首地址
    	const char* filename = "C:/Users/ky/Desktop/2.txt";
    	//const char* filename = "2.txt";
    	char a[27] = "afafhafoihfiof";
    	fp = fopen(filename, "r+");
    	if (fp == NULL)
    	{
    		printf("func fopen err\n");
    		return;
    	}
    	printf("func fopen right\n");
    	for (int i = 0; i < strlen(a); i++)
    	{
    		fputc(a[i], fp);//按字符读写文件
    	}
    	if (fp != NULL)
    	{
    		fclose(fp);
    	}
    }
    
    void fun_fgetc()//按照字符写文件
    {
    	FILE* fp = NULL;//文件句柄,就是一个内存块的首地址
    	const char* filename = "C:/Users/ky/Desktop/2.txt";
    	//const char* filename = "2.txt";
    	char a[27] = "afafhafoihfiof";
    	fp = fopen(filename, "r+");
    	if (fp == NULL)
    	{
    		printf("func fopen err\n");
    		return;
    	}
    	printf("func fopen right\n");
    	while (!feof(fp))//feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0
    	{
    		char tec = fgetc(fp);
    		Sleep(1);
    		printf("%c", tec);
    
    	}
    	if (fp != NULL)
    	{
    		fclose(fp);
    	}
    }
    
    //fputs(a,fd)  按行写
    //fgets(buf ,n,fd)  按行读,  一次一行的copy数据 到buf指针所指的内存空间  并变成c风格的字符串 把/n也拷贝到buf中
    int main()
    {
    	//fun_fpuc();
    //	fun_fgetc();
    	fun_fwrite();
    	fun_fread();
    	system("pause");
    	return 0;
    }
    
    展开全文
  • r 只读 w只写 b:二进制 t:文本形式打开等等encoding:编码方式,windows下默认为gbk例子:读文件的例子file=open('./a.txt',encoding='utf8')print(file.read())#读取整个文件,#print(file.read(10))#read...
  • 文件打开方式

    2019-06-27 21:49:07
    rb+ 读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。 w+ 打开可...
  • 读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 ...
  • c语言打开文件方式 socket 端口号

    千次阅读 2016-08-24 10:55:59
    rb+ 读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。 w+ 打开可读/写文件,...
  • open函数打开文件方式

    千次阅读 2021-06-01 17:16:52
    r: 只读方式打开文件文件的指针将会放在文件的开头。这是**默认模式**。 rb: 以二进制格式打开一个文件...wb: 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 .
  • 读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文
  • 打开文件格式说明 ...读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,
  • C文件读写总结

    2020-10-31 11:48:59
    1.文件打开 fopen(char *filename,char *type); char *filename,“文件路径+...打开一个二进制文件只写 “ab” 打开一个二进制文件,指向文件尾进行追加 “r+” 读/写方式打开一个已存在的文件 “w+”
  • rb+ 读写打开一个二进制文件,允许读数据。 rw+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件指针指向文件头,即文件长度清为0,该文件内容消失。若文件不存在则建立该文件。 w+ ...
  • r 只读方式打开文件,该文件必须存在。...读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则长度清为0,即该文件
  • 每一行都以一个十六进制的位置开始,该位置为相对于文件开头的位置。每一行有十六个字节,每个字节按高4位和第4位显示2个十六进制的字符,用户可以滑动滚动条查看任意位置的字节。 当用户选中左边结构树中的某项时,...
  • python-读写文件方式

    2018-10-12 14:19:00
    open(path, flag[, encoding][, ...rb 以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头 r+ 打开一个文件用于读写,文件的描述符放在文件的开头 w 打开一个文件只用于写入,如果该文件已经存在会覆...
  • C语言-文件读写操作

    2020-07-17 19:23:10
    C语言操作文件的函数是定义在stdio.h头文件中的一个结构体;... rb+ 以读/写方式打开一个二进制文件,允许读/写数据。 w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件
  • MATLAB中文件读写

    2018-10-11 23:06:09
     rb+ 读写打开一个二进制文件,只允许读写数据。  rt+ 读写打开一个文本文件,允许读和写。  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。  w+ 打开可读写...
  • rb+ 读/写方式打开一个二进制文件,只允许读/写数据。 rt+ 读/写方式打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。 w
  • w:以只写方式打开文件,如果文件已存在则会被覆盖,不存在则会新建一个文件 w+:以读写方式打开文件,如果文件已存在则会被覆盖,不存在则会新建一个文件 wb+:以二进制方式打开并读写文件,如果文件已存在则会被...
  • //只读方式打开一个二进制文件 if (!readPhoto) { printf("打开文件失败!\n"); system("pause"); return -1; } else{ printf("打开成功!\n"); fseek(readPhoto, 0L, SEEK_SET); //从文件头开始,...
  • rb+: 读写打开一个二进制文件,只允许读写数据。 rt+: 读写打开一个文本文件,允许读和写。 w: 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+: 打开可读写文件,若...
  • python文件读写

    2020-05-16 09:08:05
    python文件读写 模式 描述 r 只读方式打开文件文件的指针将会放在文件的开头。这是默认模式。...wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 w+
  • C语言读写TXT文件

    2020-08-28 20:55:53
    我发现这样的博客不多,在B站上看了一个小时的视频,终于get了这个技能,又可以水一篇博客了!...rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。 w 打开只写文件,若文件存在则文件长度清为0,
  • if ((f_In = fopen(argv[1], "rb")) == NULL)//以二进制只读打开文件 { printf("Open %s Fail\n",argv[1]); exit(0); } strncpy(cP_File_Name,c_Change,5);//复制“cd”字符串到数组 cP_File_Name[5]...
  • 一. python打开文件代码如下: f = open("d:\test.txt", "w") 说明:第一个参数是文件名称,包括路径;第二个参数是打开的模式mode ...如果需要以二进制方式打开文件,需要在mode后面加上字符”b”,比如”r...
  • fopen() 打开方式

    2014-07-29 16:11:54
    rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。 rw+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

以只写方式打开一个二进制文件