精华内容
下载资源
问答
  • C语言文件

    2017-12-14 11:10:29
    C语言文件打开模式总结  在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式  只可以读   只可以写  读写兼备 文本模式 r w...


    C语言文件打开模式总结


        在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图:


    打开模式

     只可以读 

     只可以写 

    读写兼备

    文本模式

    r

    w

    a

    r+

    w+

    a+

    二进制模式

    rb

    wb

    ab

     rb+ (r+b) 

     wb+ (w+b) 

     ab+ (a+b) 


        其中,二进制模式文本模式操作相似,只不过是以二进制流的形式读写而已,下面以文本模式为例分析:


        1."r" 模式

          1.1 打开文件进行“只读”操作,即只能从文件读取内容。

          1.2 若欲操作的文件不存在,则打开失败

          1.3 成功打开文件时,文件指针位于文件开头

          1.4 打开文件后,不会清空文件内原有内容。

          1.5 可从文件中任意位置读取内容。

        2."w" 模式

          2.1 打开文件进行“只写”操作,即只能向文写入内容

          2.2 若欲操作的文件不存在,则新建文件

          2.3 成功打开文件时,文件指针位于文件开头

          2.4 打开文件后,会清空文件内原有的内容。

          2.5 可向文件中任意位置写入内容,且进行写入操作时,会覆盖原有位置的内容。

        3."a" 模式

          3.1 打开文件进行“追加”操作,即只能向文件写入内容。

          3.2 若欲操作的文件不存在,则新建文件

          3.3 成功打开文件时,文件指针位于文件结尾

          3.4 打开文件后,不会清空文件内原有内容。

          3.5 只能向文件末尾追加(写)内容。

        4."r+"模式

          4.1 打开文件进行“读写”操作,即既可读取,又可写入

          4.2 若欲操作的文件不存在,则打开失败

          4.3 成功打开文件时,文件指针位于文件开头

          4.4 打开文件后,不会清空文件内原有内容。

          4.5 无论是读取内容还是写入内容,都可在文件中任意位置进行且进行写入操作时,会覆盖原有位置的内容。

        5."w+"模式

          5.1 打开文件进行“读写”操作,即既可读取,又可写入

          5.2 若欲操作的文件不存在,则新建文件

          5.3 成功打开文件时,文件指针位于文件开头

          5.4 打开文件后,清空文件内原有的内容。

          5.5 无论是读取内容还是写入内容,都可在文件中任意位置进行,且进行写入操作时,会覆盖原有位置的内容。

        6."a+"模式

          6.1 打开文件进行“读写”操作,即既可读取,又可写入

          6.2 若欲操作的文件不存在,则新建文件

          6.3 成功打开文件时,文件指针位于文件结尾

          6.4 打开文件后,不会清空文件内原有内容。

          6.5 读取内容时,可以在任意位置进行,但写入内容时,只会追加在文件尾部


        附表格加强记忆:

     打开模式 

     简述 

     若欲操作的 

     文件不存在 

     成功打开文件后 

    文件指针位置

     是否清空 

     原有内容 

    读取位置

    写入位置

    r

    只读

    打开失败

    开头

     任意位置读取 

    不可写入

    -

    w

    只写

    新建

    开头

    不可读取

     任意位置写入 

     写入时会覆盖原有位置内容 

    a

    新建

    结尾

    不可读取

     只能尾部写入 

    -

    r+

    读写

    打开失败

    开头

     任意位置读取 

     任意位置写入 

     写入时会覆盖原有位置内容 

    w+

    新建

    开头

     任意位置读取 

     任意位置写入 

     写入时会覆盖原有位置内容 

    a+

    新建

    结尾

     任意位置读取 

     只能尾部写入 

    -



        不同的打开模式对应不同的操作方式,使用时需仔细规划。

    展开全文
  • C语言文件操作

    2020-09-02 17:14:00
    C语言文件存取方式(输入,输出方式): 顺序存取 直接存取 二. C语言数据的两种存放方式: 文本文件 二进制文件 三. 定义文件类型指针变量一般形式: FILE *指针变量名 例:FILE *fp; 四. 最常用的文件使用...

    一. C语言文件存取方式(输入,输出方式):

    • 顺序存取
    • 直接存取

    二. C语言数据的两种存放方式:

    • 文本文件
    • 二进制文件

    三. 定义文件类型指针变量一般形式:

    	FILE *指针变量名   例:FILE *fp;
    

    四. 最常用的文件使用方式及其含义:

    	1)"r".为读而打开文本文件.(不存在则出错)
    	
    	2)"rb".为读而打开二进制文件.
    	
    	3)"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)
    	
    	4)"wb".为写而打开二进制文件.
    	
    	5)"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加)
    	
    	6)"ab".为在文件后面添加数据而打开一个二进制文件.
    	
    	7)"r+".为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)
    	
    	8)"rb+".为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
    	
    	9)"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失)
    	
    	10)"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
    	
    	11)"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读.
    	
    	12)"ab+".功能与"a+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.
    

    五.文件操作函数(常用):

    1. 打开文件:

      fopen(文件名,文件使用方式);
      此函数返回一个指向FILE类型的指针,调用成功返回指针,
      否则返回NULL,一般使用要进行测试是否==NULL.
      例:FILE *fp;
      	fp = fopen("file","r");
      
    2. 关闭文件:

      fclose(文件指针);
      成功关闭,fclose返回0,否则返回EOF(-1);
      (如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)
      例:FILE *fp; int a;
      	a = fopen(fp);
      
    3. 输入输出函数:

      1)输出一个字符:   
      	putc(ch,fp);或fputc(ch,fp); 
      	输出成功返回 ch 字符,否则返回EOF(-1);
      2)输入一个字符:
      	ch = getc(fp);或fgetc(fp);
      	从pf指定的文件中读取一个字符并返回;
      
    4. 判断文件结束函数:

      feof(fp);
      如果文件结束,则返回非0值,否则返回0
      
    5. 格式输入函数:

      fscanf(文件指针,格式控制符串,输入项表);
      和scanf函数相似,不同点在于它输入的对象是磁盘上文本文件中的数据
      例如:fscanf(fp,"%d%d",&a,&b); == scanf("%d%d",&a,&b);
      
    6. 格式输出函数:

      fprintf(文件指针,格式控制符串,输入项表);
      和printf函数相似,不同点在于它将输出的内容按格式存放到磁盘的文本文件中
      例如:fprintf(fp,"%d %d",x,y); == printf("%d %d",x,y);
      
    7. 字符串读取函数(读取文件返回字符串):

      fgets(str,n,fp);
      从fp所指文件中读入n-1个字符放入str为起始地址的空间内,如果在未读满n-1个字符时,
      则遇到换行符或一个EOF结束本次读操作,并将str作为函数值返回.
      
    8. 字符串输出函数(输出字符串到文件):

      fputs(str,fp);
      功能:把str字符串读入到fp所指的文件中。函数返回一个非负值,如果发生错误则返回 EOF(-1)。
      
    9. 对象输入函数(写入文件):

      size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
      功能:把ptr所指向的数组中的数据写入到给定流stream中。
      参数:ptr:指向要被写入的元素数组的指针。
      	  size:要被写入的每个元素的大小,以字节为单位。
      返回:nmemb:元素的个数,每个元素的大小为 size 字节。
      	  stream: 指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
      
    10. 对象读取函数(读取文件):

      size_t fread( void *restrict buffer, size_t size, size_t count, FILE *restrict stream );
      功能:从给定输入流stream读取最多count个对象到数组buffer中(相当于以对每个对象调用size次fgetc),
      把buffer当作unsigned char数组并顺序保存结果。流的文件位置指示器前进读取的字节数。
      参数:buffer:指向要读取的数组中首个对象的指针
           size: 每个对象的大小(单位是字节)
           count: 要读取的对象个数
           stream: 输入流
      
    11. 文件定位函数

         pf:  文件指针
         offset:  以字节为单位的位移量,为长整形.
         origin:  是起始点,用来指定位移量是以哪个位置为基准的.
      

      1) fsee(pf,offset,origin);
      功能:移动文件位置指针到指定的位置上,接着的读或写操作将从此位置开始。
      SEEK_SET 0 文件开始
      SEEK_END 2 文件末尾
      SEEK_CUR 1 文件当前位置

      2) ftell(pf);
      功能:获得文件当前位置指针的位置,给出当前位置指针相对于文件开头的字节数。
      出错时,函数返回-1L
      例:测文件长度 long t;
      fseek(fp,0L,SEEK_END);
      t=ftell(fp);

      3)rewind(pf);
      无返回值,使文件的位置指针回到文件开头。

    展开全文
  • c语言文件操作基础内容,包括fwirte,fopen,rb,wb等等的用法
  • C语言 文件操作

    2021-05-20 16:33:27
    c语言中,对文件操作由库函数完成 FILE 文件类型,构造类型,系统提供的结构体 文件指针 FILE *f1; 打开文件 /* 打开文件语法格式 FILE *fopen(char *filename,char *mode); 按照指定的模式打开文件 mode 打开模式...

    文件分类

    1、文本文件、二进制文件
    2、普通文件、设备文件(显示器、打印机、键盘等)
    3、源文件、目标文件、可执行文件、头文件、数据文件

    在c语言中,对文件操作由库函数完成
    FILE 文件类型,构造类型,系统提供的结构体
    文件指针 FILE *f1;

    打开文件

    /*
    打开文件语法格式
    FILE *fopen(char *filename,char *mode);
    按照指定的模式打开文件
    mode 打开模式的字符串
    “r”:只读
    “w”:只写
    “a”:追加
    “rb”:对二进制只读
    “wb”:二进制只写
    “ab”:二进制追加
    “r+”:可读写
    “w+”:打开或新建文件
    “a+”:打开文件,可读,也可以追加
    
    返回值问题:如果打开文件成功,则获取对应地址,否则返回NULL
    */
    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	FILE *fp;
    	char ch;
    	fp = fopen("01-文件分类.txt","r");
    	if(fp == NULL){
    		printf("不能打开文件\n");
    		exit(0);
    	}
    	ch = fgetc(fp);//从文件中获取一个字符
    	while(ch != EOF){//EOF系统定义的文件结束符
    		printf("%c\n",ch);
    		ch = fgetc(fp);
    	}
    	fclose(fp);//操作完文件之后,一定要关闭文件
    	return 0}
    
    

    打开文件写入内容

    //键盘输入一个字符串,以#号结束,存入文件中
    #include <stdio.h>
    int main(){
    	FILE *fp;
    	char ch;
    	if((fp = fopen("03.txt","w+")) == NULL){
    		printf("不能打开文件\n");
    		return 0;
    	}
    	printf("键盘输入一个字符串,以#号结束并回车:");
    	ch = getchar();
    	while(ch ! = '#'){
    		fputc(ch,fp);//把ch变量中的内容输出到文件中
    		ch = getchar();
    	}
    	fclose(fp);
    	return 0;
    }
    

    打开文件读出内容并输出终端

    #include <stdio.h>
    int main(){
    	FILE *fp;
    	if((fp = fopen("03.txt","r"))==NULL){
    		printf("不能打开文件!")}else{
    		char ch = fgetc(fp);
    		while( ch != EOF){
    			putchar(ch);
    			ch = fgetc(fp);
    		}
    		fclose(fp);
    	}
    	return 0;
    }
    

    fputs:向指向的文件中输出一个字符串,字符串写入文件中

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	FILE *fp;
    	char fileName[30],str[50];
    	printf("请输入一个文件:");
    	scanf("%s",fileName);
    	if((fp = fopen(fileName,"w"))==NULL){
    		printf("打开失败\n");
    		printf("按任意键继续........");
    		getchar();
    		exit(0);
    	}
    	printf("请输入一个字符串");
    		getchar();//消化多余的回车符。接收输入文件名后的那个回车符
    	gets(str);
    	fputs(str,fp);//把str字符串写入文件fp中
    	fclose(fp);
    	return 0;
    }
    

    fgets (输入到字符串,输入多少字符数,文件指针变量)

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	FILE *fp;
    	char filename[30],str[5];
    	printf("请输入一个文件名:");
    	scanf("%s",filename);
    	if((fp = fopen(filename,"r"))==NULL){
    		printf("打开失败!\n");
    		printf("按任意键继续......");
    		getchar();
    		exit(0);
    	}
    	fgets(str,sizeof str,fp);//读取文件中的若干字符存入str数组中
    	printf("%s\n",str);
    	return 0;
    }
    

    fprintf();

    /*
    格式化字符串对应的内容输出到文件
    语法格式:
    length = fprintf(文件,格式化字符串,输出列表);
    */
    #include <stdio.h>
    int main(){
    	FILE *fp;
    	int i = 65;
    	if((fp = fopen("07.txt","w"))==NULL){
    		printf("打开文件失败\n");
    		return 0;
    	}
    	k = fprintf(fp,"%d,%d",i,i);
    	printf("k=%d\n",k);
    	fclose(fp);
    	return 0;
    }
    
    #include <stdio.h>
    int main(){
    	FILE *fp;
    	int i = 65,k;
    	if((fp = fopen("08.txt","w"))==NULL){
    		printf("打开文件失败!\n");
    		return 0;
    	}
    	k = fprintf(fp,"%c,%c",i,i);
    	printf("k=%d\n",k);
    	fclose(fp);
        return 0;
    }
    

    fscanf(文件,格式化字符串,输入列表)

    读取文件中对应的信息

    #include <stdio.h>
    int main(){
    	FILE *fp;
    	int i,k;
    	if((fp = fopen("07.txt","r"))==NULL){
    		printf("打开文件失败\n");
    		return 0;
    	}
    	fscanf(fp,"%d,%d",&i,&k);
    	printf("i=%d,k=%d\n",i,k);
    	fclose(fp);
    	return 0;
    }
    

    fread

    /*
    	1、读文件内容到内存变量buffer中
    	fread(buffer,size,count,fp)
    	fread(存数据的指针变量地址,字节数,次数,文件指针)
    
    	2、把内存变量buffer中的内容写入文件中
    	fwrite(buffer,size,count,fp)
    
    */
    //先把通讯录信息写入文件,再读出打印出来
    #include <stdio.h>
    #include <stdlib.h>
    struct addressList{
    	char name[30];
    	char address[50];
    	char phoneTel[11];
    } info[10];
    //写入n条通讯录
    void save(char *filename,int n){
    	FILE *fp;
    	int i;
    	if((fp = fopen(filename,"wb"))==NULL){
    		printf("打开失败!!");
    		exit(0);
    	}
    	for(i = 0;i < n;i++){
    		if(fwrite(&info[i],(sizeof(struct addressList)),1,fp)!=1){
    			printf("文件写入出错!!\n");
    		}
    	}
    	fclose(fp);
    }
    void show(char *filename,int n){
    	int i;
    	FILE *fp;
    	if((fp = fopen(filename,"rb"))==NULL){
    		printf("打开文件失败!\n");
    		exit(0);
    	}
    	for(i = 0;i < n;i++){
    		struct addressList	temp;	
    		fread(&temp,(sizeof(struct addressList)),1,fp);
    		printf("姓名:%s\n地址:%s\n手机号:%s\n",temp.name,temp.address,temp.phoneTel);
    	}
    	fclose(fp);
    }
    int main(){
    	int i,n;
    	char filename[50];
    	printf("录入通讯录的条数:");
    	scanf("%d",&n);
    	printf("输入通讯录要保存到的文件名:");
    	scanf("%s",filename);
    	for(i = 0;i < n;i++){
    		printf("请输入第%d条通讯录的姓名、地址、电话:\n",i+1);
    		scanf("%s%s%s",info[i].name,info[i].address,info[i].phoneTel);
    	}	
    	save(filename,n);
    	show(filename,n);
        return 0;
    }
    
    

    文件定位操作函数

    /*
    	1、fseek函数
    	fseek(文件类型指针,偏移量,起始点)
    	起始点可以是文件头(0)、文件尾(2)、当前位置(1)
    	fseek(fp,-20L,2);
    	//以上代码表示:把文件内部位置指针从文件尾后退20个字节
    	2、rewind函数
    		rewind(fp):把文件内部位置指针移到文件头
    	3、ftell函数
    		获取文件内部位置指针的当前位置,如果位置在文件尾,则获取到文件总长度。
    
    	
    */
    #include <stdio.h>
    int main(){
        return 0;
    }
    
    

    fseek

    //fseek(文件类型指针,位移量,起始点);
    //把文件内部定位位置的指针从指定的起始点移动若干字节(位移量)
    //指定的起始点有三种:开头(0)、当前位置(1)、结尾(2)
    //					SEEK_SET	SEEK_CUR   	SEEK_END
    /*
    向任意一个二进制文件中写入一个长度大于6的字符串,然后从该字符串的第6个字符开始输出剩余的字符。
    */
    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    	FILE *fp;
    	char filename[30],str[50];
    	printf("请输入文件名:");
    	scanf("%s",filename);
    	//printf("%s\n",filename);
    	if((fp = fopen(filename,"wb"))==NULL){
    		printf("打开文件失败~");
    		printf("按任意键继续.......");
    		getchar();
    		exit(0);
    	}
    	printf("请输入一个字符串(长度大于6小于50):");
    	scanf("%s",str);
    	//printf("%s\n",str);
    	fputs(str,fp);
    	fclose(fp);
    	
    	if((fp = fopen(filename,"rb"))==NULL){
    		printf("打开文件失败~");
    		printf("按任意键继续.......");
    		getchar();
    		exit(0);
    	}	
    	fseek(fp,5L,0);//把文件内部的位置指针指向第6个字节的位置
    	fgets(str,sizeof(str),fp);
    	puts(str);
    	return 0;
    }
    
    

    rewind

    //rewind(fp)使文件内部的位置指针指向文件头
    //把abc123文件中的内容打印两次
    #include <stdio.h>
    int main(){
    	FILE *fp;
    	char ch;
    	fp = fopen("abc123","rb");
    	ch = fgetc(fp);
    	while(ch != EOF){
    		putchar(ch);
    		ch = fgetc(fp);
    	}
    	printf("\n");
    	//rewind(fp);//让文件内部的位置指针指向了文件头
    	fseek(fp,0,0);//此用法 与 rewind(fp)功能相同
    	ch = fgetc(fp);
    	while(ch != EOF){
    		putchar(ch);
    		ch = fgetc(fp);
    	}
    	printf("\n");
        return 0;
    }
    
    

    ftell

    //ftell(fp):返回文件内部的位置指针的当前位置,从文件头开始计算。返回-1表示出错。
    
    //通过此函数可以求字符串长度
    #include <stdio.h>
    int main(){
    	FILE *fp;
    	char ch;
    	long length;
    	fp = fopen("abc123","rb");
    	ch = fgetc(fp);
    	while(ch != EOF){
    		putchar(ch);
    		ch = fgetc(fp);
    	}
    	printf("\n");
    	length = ftell(fp);
    	printf("文件的总字符数,即字符串长度为:%ld\n",length);	
    	fclose(fp);
        return 0;
    }
    
    展开全文
  • C语言文件函数

    2017-05-08 22:46:18
    C语言文件函数1.说明:t(text): 文本文件,可省略不写 b(banary): 二进制文件 +: 读和写 name:要打开的文件的(路径)名字 mode:要打开的文件的模式 FILE:文件指针(结构体) 打开方式mode说明: r :以只读方式...

    C语言文件函数

    1.说明:

    t(text): 文本文件,可省略不写
    b(banary): 二进制文件
    +: 读和写
    name:要打开的文件的(路径)名字
    mode:要打开的文件的模式
    FILE:文件指针(结构体)
    打开方式mode说明:
    r  :以只读方式打开文件,只允许读取,不允许写入。该文件必须存在
    r+ :以读/写方式打开文件,允许读取和写入。该文件必须存在
    rb+:以读/写方式打开一个二进制文件,允许读/写数据,文件必须存在
    rt+:以读/写方式打开一个文本文件,允许读和写,文件必须存在
    w  :以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件
    w+ :以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件
    a  :追加的方式打开只写文件。若文件不存在,建立该文件,否则写入的数据会被加到文件尾(EOF保留)
    a+ :以追加方式打开可读/写的文件;
    wb :以只写方式打开或新建一个二进制文件,只允许写数据
    wb+:以读/写方式打开或建立一个二进制文件,允许读和写
    wt+:以读/写方式打开或建立一个文本文件,允许读写
    at+:以读/写方式打开一个文本文件,允许读或在文本末追加数据
    ab+:以读/写方式打开一个二进制文件,允许读或在文件末追加数据
    

    2.fopen函数

    1. 原型:FILE *fopen(char const *name, char const *mode)
    2. 返回:打开成功返回指向FILE结构的指针,否则返回NULL
    3. 注意:应该始终检查fopen的返回值!如果失败返回NULL,不检查则会把NULL指针传给后续的I/O函数
    4. 同类型函数:freopen函数
      1.原型:FILE *freopen(char const *filename, char const *mode, FILE *stream)
      2.作用:打开或者重新打开一个特定的文件流
      3.函数先试图关闭要打开的文件流(有可能是以前的,也有可能是标准流的stdin、stdout、stderr),然后用指定的文件和模式打开这个流
      4.如果成功返回第三个参数值,否则返回NULL
    5. 示例:
    FILE *input;
    input = fopen("data3", "r");
    if(input == NULL)  //检查打开是否成功
    {
        perror("data3");  //返回错误的方式
        exit(EXIT_FAILURE);  //终止程序的执行
    }
    • 注:如果错误返回: data3:No such file or directory

    3.flcose函数

    1. 原型:int fclose(FILE *f)
    2. 返回:成功返回零值,否则返回EOF并把错误代码存到errno
    3. 示例:
    int main(int ac, char **av)
    {
        int exit_status = EXIT_SUCCESS;
        FILE *input;
        /*当还有更多的文件名时*/
        while(*++av != NULL)
        {
            /*试图打开这个文件*/
            input = fopen(*av, "r");
            if(input == NULL)
            {
                perror(*av);
                exit_status = EXIT_FAILURE;
                continue;
            }
            /*处理文件*/
            /*关闭文件*/
            if(fclose(input) != 0)
            {
                perror("fclose");
                exit(EXIT_FAILURE);
            }
        }
        return exit_status;
    }
    • **注:**fclose会在文件关闭之前刷新缓冲区。程序一定要检查文件是否关闭,因为很可能在fclose调用之前文件就已经关闭。

    4.fgetc与getchar函数

    1. 原型:int fgetc(FILE *stream)
      int getchar(void)
    2. 返回:返回整形值是为了允许函数报告文件的末尾(EOF)
    3. 注意:
      1.fgetc需要操作的流是要参数传递,getchar需要从标准输入读取并把它作为返回值返回
      2.getchar函数是fgetc的宏定义

    5.fputc与putchar函数

    1. 原型:int fputc(int character, FILE *stream)
      int putchar(int character)
    2. 说明:第一个参数是要被打印的字符
    3. 注意:

      1.打印之前,函数把第一个整形参数裁剪为一个无符号字符型值
      2.putchar函数是fputc的宏定义
      如果任何原因导致函数失败,都返回EOF


    void main(int argc, char *argv[])
    {
        char ch = '\0';
        FILE *file = NULL;
        if(argc != 2)
        {
            printf("Error format,Usage: display filename1\n");
            return;
        }
        if((file = fopen(argv[1], "r")) == NULL)
        {
            printf("The file <%s> can not be opened.\n", argv[1]);
            return;
        }
        while((ch = fgetc(file)) != EOF)
        {
            putchar(ch);
        }
        fclose(file);
    }

    putchar('abc')

    • 上述函数只打印一个字符,打印哪个,根据编译器选择

    • fgetc和fputc都是真正的函数,但getchar和putchar都是通过#define指令定义的宏,宏在执行效率上稍高

    6.fprintf函数:

    1. 函数原型:int fprintf(FILE *stream, char *format[, argument,...])
    2. 功能:传送格式化输出到一个文件中
    3. 参数说明:FILE*一个FILE型的指针;char*格式化输入函数,和printf里的格式一样
    4. 返回值:成功时返回转换的字节数,失败时返回一个负数

      eg:fprintf(fp,"%s\n",str)

    7.fscanf函数:

    1. 函数原型:int fscanf(FILE *stream, char *format[,argument...])
    2. 功能:从一个流中执行格式化输入
    3. 参数说明:FILE*一个FILE型的指针;char*格式化输出函数,和scanf里的格式一样
    4. 返回值:成功时返回转换的字节数,失败时返回一个负数

      eg:fscanf(fp,"%s",str)

    8.feof函数:

    1. 函数原型:int feof(FILE * stream)
    2. 作用:检查文件流是否读到了文件尾(在打印的同时会打印最后一个EOF)
    3. 返回值:非零值代表已到达文件尾,其他情况返回0

    9.fgets函数与fputs函数:

    1. 函数原型:char * fgets(char * s,int size,FILE * stream) int fputs(const char * s,FILE * stream)
    2. 函数说明:
      1.fgets:文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束
      2.fputs:将参数s所指的字符串写入到参数stream所指的文件内
    3. 返回参数说明:
      1.fgets:成功则返回s指针,返回NULL则表示有错误发生
      2.fputs:成功则返回写出的字符个数,返回EOF则表示有错误发生

    10.fread函数:

    1. 函数原型:size_t fread(void * ptr, size_t size, size_t count, FILE * stream)
    2. 参数说明:stream为已打开的文件指针;ptr 指向欲存放读取进来的数据空间(一个或多个值的数组);size是缓冲区每个元素的字节数;读取的字符数以参数size*count来决定
    3. 返回参数说明:返回实际读取到的count数目(不是字节数),如果此值比参数count 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么事情

    11.fwrite函数:

    1. 函数原型:size_t fwrite(const void * ptr, size_t size, size_t count, FILE * stream)
    2. 参数说明:stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*count来决定
    3. 返回值说明:返回实际写入的count数目

    /*从输入文件读取二进制数据并且把结果写入到一个输出文件*/
    struct VALUE
    {
        long a;
        float b;
        char c[SIZE];
    }value[ARRAY_SIZE];
    ...
    n_value = fread(value, sizeof(struct VALUE), ARRAY_SIZE, input_stream);
    fwrite(values, sizeof(struct VALUE), n_value, output_stream);

    12.fseek函数:

    1. 函数原型: int fseek(FILE * stream,long offset,int whence)
    2. 相似函数:

      原型:fsetpos(FILE *stream, fpos_t const *position)
      作用:把文件位置设置为存储在这个位置(fpos_t指针)的值

    3. 函数说明:用来移动文件流的读写位置
    4. 参数说明:

      1.stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数
      2.whence类型:

      SEEK_SET:从距文件开头offset位移量为新的读写位置(offset必须为非负值);
      SEEK_CUR:以目前的读写位置往后增加offset个位移量(offset可正可负);
      SEEK_END:将读写位置指向文件尾后再增加offset个位移量(offset可正可负,如果为正值将定位到文件尾的后面)(二进制流中可能不被支持,应该避免)

    5. 备注:当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现

    6. 常用方式:

      1.欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);
      2.欲将读写位置移动到文件尾时:fseek(FILE *stream,0,SEEK_END);

    7. 返回参数说明:成功时则返回0,若有错误则返回-1

    8. 附加说明:fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置

    13.ftell函数:

    1. 函数原型:long ftell(FILE * stream)
    2. 作用:取得文件流的读取位置(下一个读取或写入将要开始的位置距离文件起始位置的偏移量)
    3. 返回参数说明:当调用成功时则返回目前的读写位置,若有错误则返回-1

    14.fflush函数:

    1. 函数原型: int fflush(FILE* stream)
    2. 函数说明:强制将缓冲区内的数据写回参数stream指定的文件中
    3. 返回值说明:成功返回0,失败返回EOF

    #define putchar(ch) fputc(ch, stdout)
    
    int main(int argc, char *argv[])
    {
    
        //char *buffer = (char *)malloc(20);
        //char *buffer = "hello world!";
    
        int datas[4] = {5, 6, 7, 8};
        FILE *file = NULL;
        int i = 0;
    
        if((file = fopen(argv[1], "r")) == NULL)
        {
            printf("Open file error!\n");
            return 0;
        }
        //fwrite(datas, sizeof(int), sizeof(datas) / sizeof(int), file);
        fseek(file, sizeof(datas) + 1, SEEK_SET);
        fread(datas, sizeof(int), sizeof(datas) / sizeof(int), file);
        for(i = 0 ; i < sizeof(datas) / sizeof(int); ++i)
        {
            printf("%4d", datas[i]);
        }
        putchar(10);
        fseek(file, 0, SEEK_SET);
        fread(datas, sizeof(int), sizeof(datas) / sizeof(int), file);
        for(i = 0 ; i < sizeof(datas) / sizeof(int); ++i)
        {
            printf("%4d", datas[i]);
        }
        putchar(10);
    
        /*while((ch = getchar()) != '$') 
        {
            fputc(ch, file);
        }*/
    
        /*if(EOF == fputs(buffer, file))
        {
            printf("Write file error!\n");
            return 0;
        }*/
    
        //printf("%s\n", buffer);
    
        /*while((ch = fgetc(file)) != EOF) 
        {
            putchar(ch);
        }*/
        /*while(!feof(file))
        {
            putchar(fgetc(file));
        }*/
        fclose(file);
        //free(buffer);
    
        return 0;
    }

    15.clearerr函数:

    1. 函数原型:void clearerr(FILE * stream)
    2. 作用:清除文件流的错误旗标

    16.rewind函数(重设文件流的读写位置为文件开头):

    1. 函数原型:void rewind(FILE * stream)
    2. 函数说明:把文件流的读写位置移至文件开头
    3. 备注:此函数相当于调用fseek(stream, 0, SEEK_SET)
    4. 相似函数:
      原型:fgetpos(FILE *stream, fpos_t, *position)
      作用:在这个位置(fpos_t指针)存储文件的当前位置

    17.setbuf函数(设置文件流的缓冲区):

    1. 函数原型:void setbuf(FILE * stream,char * buf)
    2. 函数说明:在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区(防止I/O函数动态为它分配一个缓冲区)
    3. 参数说明:参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址;如果参数buf为NULL指针,则为无缓冲I/O
    4. 注意:setbuf设置了另一个数组用于对流进行缓冲,数组的字符长度必须为BUFSIZ(在stdio.h中定义)

    18.setvbuf函数(设置文件流的缓冲区):

    1. 函数原型:int setbuffer(FILE * stream, char * buf, int mode, size_t size)
    2. 函数说明:在打开文件流后,读取内容之前,调用setvbuf()可用来设置文件流的缓冲区
    3. 参数说明:stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,mode用于指定缓冲的类型(_IOFBF指定一个完全缓冲的流 _IONBF指定一个不缓冲的流 _IOLBF指定一个行缓冲流)
    4. 注意:最好用一个长度为BUFSIZ(尽量为系统内部使用的缓冲区的整数倍)的字符数组作为缓冲区

    19.tmpfile函数:


    1. 原型:FILE *tmpfile(void)
    2. 作用:创建一个临时文件保存数据(当文件关闭或程序终止自动删除)
    3. 说明:如果文件必须以其他模式打开或者由一个程序打开另一个程序读取则不能使用此函数,而是使用fopen函数:
    4. 注:临时文件的名字创建:

    原型:char *tmpnam(char *name)
    说明:如果参数为NULL则返回一个指向静态数组的指针,该数组包含了被创建的文件名(调用次数不超过TMP_MAX次,便没有重名),否则参数便假定是一个指向长度至少为L_tmpnam的字符数组的指针,且返回值为这个参数

    20.参考文章:

    • 《C数组与指针》
    展开全文
  • c语言 文件操作

    2015-05-10 17:04:17
    c语言 文件操作文件类型指针 FILE *fp; fp是一个指向FILE类型结构体的指针变量。文件的打开 FILE *fp; fp=fopen("文件路径","文件使用方式"); 其中,文件使用方式有r,w,a,rb,wb,rb(读写)等。若要打开的文件失败...
  • C语言文件复制实例详解 文件复制,在Linux中,将生成的read.o 重新文件拷贝一份复制到ReadCopy.o中,并且更改ReadCopy.o文件的操作权限。使其能够正常运行。 实例代码: #include int main(){ FILE *r_file = ...
  • C语言文件读写模式参数 r: 以只读方式打开文件,该文件必须存在。 r+: 以可读写方式打开文件,该文件必须存在。 rb+: 读写打开一个二进制文件,只允许读写数据。 rt+: 读写打开一个文本文件,允许读和写。 w: 打开只...
  • c语言文件打开模式

    2018-11-16 11:06:00
    C语言文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 只可以读 只可以写 读写兼备 文本模式 r w a r+ w+ a+ 二...
  • c语言文件分割与合并

    2017-05-20 23:05:00
    c语言文件分割与合并 一.综述 c语言操作文件通过文件指针FILE*,每个要操作的文件必须打开然后才能读写。 注意事项: @1分割与合并文件最好使用二进制模式即"rb"或"wb",这样可以操作任何类型文件 ...
  • c语言文件操作

    2013-09-10 16:19:17
    今天给大家说说c语言的操作,刚入门,如果有错,希望大家多多批评......     1.先来一个基本的,读取文本文件 #include&lt;stdio.h&...//rt:read text只读文本文件 rb:read binar...
  • C语言文件复制

    千次阅读 2018-06-24 23:01:38
    #include &lt;stdio.h&gt; int main() ...rb");  f2 = fopen("out.txt", "wb");//将in.txt复制为out.txt;  while((c = fgetc(f1)) != EOF)  fputc...
  • C语言文件读写

    2015-02-21 22:49:00
    1、用fopen打开文件 该函数的原型为FILE *fopen(const char *filename, const char *mode),第一个参数是文件名,第二个参数是打开文件的模式。 打开文件的模式主要是以下几...“rb”以二进制方式打开文件,只进行...
  • C语言文件打开模式浅析。
  • C语言文件操作库函数

    千次阅读 2019-03-27 17:35:49
    创建和打开函数: ...r,rb 以只读形式打开,若文件不存在 ,返回错误 w,wb 以只写方式打开。如果文件不存在,则创建该文件;如果文件存在,则覆盖原文件 a,ab 以追加方式打开。如果文件不存在...
  • c语言文件操作函数

    2017-04-08 15:05:05
    1.fopen FILE* fopen(const char* filename,const char* mode);filename文件路径+文件名,mode,文件...r/rb 只读方式打开一个文本文件文件不存在,报错 w/wb 写方式打开文件文件存在则清空
  • C语言文件常用操作

    2017-08-08 21:23:21
    FILE *fp//定义一个文件...eg:fp=fopen("a1","rb+"); “文件指针名”必须是被说明为FILE 类型的指针变量; “文件名”是被打开文件的文件名; “使用文件方式”是指文件的类型和操作要求; “文件名”是字符串常量或
  • C语言文件输入输出

    2018-12-21 18:56:37
    #include&lt;stdio.h&gt;...rb"); //定义一个输入文件 font=fopen("data.out","wb"); //定义一个输出文件 while(fscanf(fin, "%d", &amp;b)==1)
  • "rb" 打开一个二进制文件(只能读)。 "rb+" 与"rb"的区别在于可以"写"。 "w" 以"写"的方式创建一个文本文件,如果这个文件 已经存在,就会覆盖原来的文件。 "w+" 与"w"的区别在于,增加了"读"。 "wb" 以"写"的方式创建...
  • C语言中r和rb读写文件的区别

    千次阅读 2018-03-06 15:55:43
    rb" 为读而打开二进制文件 一般使用方式如下:12FILE *fp; // 定义一个&lt;a href="https://www.baidu.com/s?wd=%E6%96%87%E4%BB%B6%E6%8C%87%E9%92%88&amp;tn=44039180_cpr&amp;fenlei=...

空空如也

空空如也

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

c语言文件rb

c语言 订阅