zoukankan      html  css  js  c++  java
  • C11 C语言文件的读写

    目录

    • 文件的打开和关闭
    • 字符流读写文件

    文件的打开和关闭

    fopen( )

    fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。

    函数原型:

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

      

    filename 是字符串,用来命名文件,访问模式 mode 的值如下表:

    模      式描述
    r 打开一个已有的文本文件,允许读取文件。
    w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
    a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
    r+ 打开一个文本文件,允许读写文件。
    w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
    a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

    如果打开的二进制文件,则模式写成:

    "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
    

      

    fclose( )

    fclose( ) 函数用于关闭文件。函数的原型如下:

    int fclose( FILE *fp );
    

      

    如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。fclose函数会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。

    EOF 是一个定义在头文件 stdio.h 中的常量。

    文件打开和关闭示例

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp = NULL; 
    	//fp = fopen("d:/abc1.txt", "w+");//文件不存在会创建
    	fp = fopen("d:/abc2.txt", "r");
    	if(fp!=NULL){
    		printf("文件打开成功!
    ");
    	}else{
    		printf("文件打开失败!
    ");
    	}
    	
    	int result=fclose(fp);
    	if(result==0){
    		printf("文件关闭成功!
    ");
    	}else{
    		printf("文件关闭失败!
    ");
    	}
    	return 0;
    }
    

      

    字符流读写文件

    写文件

    1.字符流写文件

    语法格式:

    int fputc( int c, FILE *fp );
    

    说明:把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。

    2.字符串流写文件

    语法格式: 

    int fputs( const char *s, FILE *fp );
    

    说明:把以 null 结尾的字符串的字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。

    以字符串写入的另外一个函数,可以写入格式字符串:

    int fprintf(FILE *fp,const char *format, ...) 
    

    读文件

    1.字符流读文件

    语法格式:

    int fgetc( FILE * fp );
    

    说明:从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。

    2.字符串流读文件

    语法格式: 

    char *fgets( char *buf, int n, FILE *fp );
    

    说明:从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。

    如果这个函数在读取最后一个字符之前就遇到一个换行符 ' ' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。

    读取字符串流的另外一个函数:

     int fscanf(FILE *fp, const char *format, ...) 
    

    fscanf函数从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。

    字符流和字符串流读写文件示例代码、

    #include <stdio.h>
    
    int main()
    {
    	FILE *fp = NULL; 
    	fp = fopen("d:/abc.txt", "w+");//打开文件
    	if(fp!=NULL){
    		printf("文件打开成功!
    ");
    	}else{
    		printf("文件打开失败!
    ");
    	}
    	
    	//写数据
    	fprintf(fp, "fprintf写入字符串数据
    ");
    	fputs("fputs1写入字符串数据
    ", fp);
    	fputs("fputs2写入字符串数据
    ", fp);
    	printf("写入文件成功!
    ");
    
    	int result1=fclose(fp);
    	if(result1==0){
    	   printf("文件关闭成功!
    ");
    	}else{
    	   printf("文件关闭失败!
    ");
    	}
    
    	//读数据
    	FILE *fp2 = NULL; 
    	fp2 = fopen("d:/abc.txt", "r");//打开文件
    	printf("写入文件的内容:
    ");
    	char buff[255];//字符缓冲
    	fscanf(fp2, "%s", buff);
        printf("1: %s
    ", buff );
        fgets(buff, 255, (FILE*)fp2);
        printf("2: %s
    ", buff );   
    	fgets(buff, 255, (FILE*)fp2);
    	printf("3: %s
    ", buff );
    	   
    	int result2=fclose(fp2);
    	if(result2==0){
    	   printf("文件关闭成功!
    ");
    	}else{
    	   printf("文件关闭失败!
    ");
    	}
    	
    	return 0;
    }
    

      

  • 相关阅读:
    通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(三)
    通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(二)
    stepper组件使用
    解决循环删除list中元素ConcurrentModificationException异常问题
    简单选择排序SelectSort
    用js写出简单的计算器
    在一个项目中,添加.js文件出现错误
    弹出当前值以及修改
    映射:表之间的关联
    置换(用递归的方法执行置换)
  • 原文地址:https://www.cnblogs.com/rask/p/10188164.html
Copyright © 2011-2022 走看看