C语言文件读写常用函数总结

C语言文件读写常用函数总结

有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸。

fopen函数

  • 头文件:stdio.h
  • 原型: FILE *fopen(const char *filename, const char *mode);
  • 作用: 使用给定的模式 mode打开 filename 所指向的文件。
  • 参数:
    • filename: 所需打开文件的文件名。
    • mode: 访问模式。
      • r :以只读方式打开文件,该文件必须存在。
      • r+:以读/写方式打开文件,该文件必须存在。
      • rb+:以读/写方式打开一个二进制文件,只允许读/写数据。
      • rt+:以读/写方式打开一个文本文件,允许读和写。
      • w:打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
      • w+:打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
      • a:以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。
      • a+:以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。
      • wb:以只写方式打开或新建一个二进制文件,只允许写数据。
      • wb+:以读/写方式打开或新建一个二进制文件,允许读和写。
      • wt+:以读/写方式打开或新建一个文本文件,允许读和写。
      • at+:以读/写方式打开一个文本文件,允许读或在文本末追加数据。
      • ab+:以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
参数 功能
r 以只读方式打开文件,该文件必须存在。
r+ 以读/写方式打开文件,该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
a 以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。
a+ 以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。
wb 以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或新建一个二进制文件,允许读和写。
wt+ 以读/写方式打开或新建一个文本文件,允许读和写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
  • 返回值:
    文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回 NULL,并把错误代码存在error中。
  • 运用
#include <stdio.h>
#include <stdlib.h>
int main()
{
    
    
	FILE *fp;
	fp = fopen("abc.txt", "r");/* 以只读的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
	fclose(fp); /* 关闭文件 */
	fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
	return 0;
}

fclose函数

  • 头文件:stdio.h
  • 原型: int fclose( FILE *fp );
  • 作用: 把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
  • 参数:
    • fp: 指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流
  • 返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。
  • 运用:
int main()
{
    
    
	FILE *fp;
	fp = fopen("abc.txt", "r");/* 以只读的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
	fclose(fp); /* 关闭文件 */
	fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */
	return 0;
}

fseek函数

  • 头文件:stdio.h
  • 原型: int fseek(FILE *stream, long offset, int fromwhere);
  • 作用: 重定位流(数据流/文件)上的文件内部位置指针
    • 注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。
  • 参数:
    • stream:文件指针
    • offset:偏移量,正数表示正向偏移,负数表示负向偏移
    • origin:设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
      • SEEK_SET: 文件开头
      • SEEK_CUR: 当前位置
      • SEEK_END: 文件结尾
        其中SEEK_SET,SEEK_CUR和SEEK_END对应数字依次为0,1和2.
  • 返回值:成功,返回0,失败返回非0值,并设置error的值,可以用perror()函数输出错误。
  • 运用
    fseek(fp,100L,0);  //把fp指针移动到离文件开头100字节处;
    fseek(fp,100L,1);  //把fp指针移动到离文件当前位置100字节处;
    fseek(fp,-100L,2); //把fp指针退回到离文件结尾100字节处。

fprintf函数

  • 头文件:stdio.h

  • 原型: int fprintf (FILE* stream, const char*format, [argument])

  • 作用: 根据指定的格式(format),向输出流(stream)写入数据(argument)(和printf差不多,多了第一个参数,找到文件,printf是输出东西到你的黑框框里面,这个是写到文件里面)

  • 注意:fprintf( )会根据参数format 字符串来转换并格式化数据,然后将结果输出到参数stream 指定的文件中,直到出现字符串结束(’\0’)为止。

  • 参数:

    • stream :指向 FILE 对象的指针,该 FILE 对象标识了流。
    • format : C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
    • [argument]:附加参数列表
  • 运用

    FILE *fp;
    int a = 10;
	fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
    fprintf(fp, "Hello world\n"); //向文件中写入Hello world.
    fprintf(fp, "%d", a); //向文件中写入a.
    fclose(fp); /* 关闭文件 */
    return 0;

fsanf函数

  • 头文件:stdio.h

  • 原型: int fscanf(FILE *stream, char *format[,argument…]);

  • 作用: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。(和sanf类似不过多了第一个参数用来找文件,scanf需要我们从键盘输入,fscanf文件里面的内容相当于我们键盘输入的内容)

  • 返回值:整型,成功返回读入的参数的个数,失败返回EOF(-1)。

  • 运用

//文件abc.txt里面是 10
    FILE *fp;
    int ;
	fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
    fscanf(fp, "%d", &a);		//从文件中读出一个整型
    fclose(fp); /* 关闭文件 */
    return 0;

feof函数

  • 头文件:stdio.h
  • 原型: int feof(FILE *stream);
  • 参数: 指向 FILE 对象的指针。
  • 作用: 判断是否到达文件末尾
  • 返回值:如果文件结束,则返回非0值,否则返回0,
	FILE *fp;
    fp = fopen("abc.txt", "r");//打开文件
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
    if(feof(fp)) //判断是否到达文件末尾
        printf("We have reached the end of file\n");
      fclose(fp);
      return 0;

fgetc函数

  • 头文件:stdio.h
  • 原型: int fgetc(FILE *stream)
  • 参数: 指向 FILE 对象的指针。
  • 作用: 从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。
  • 返回值:该字符对应的ascll码。如果读到文件末尾或者读取出错时返回EOF
	FILE *fp;
	int ch;
    fp = fopen("abc.txt", "r");//打开文件
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
    ch = fgetc(fp);	//将第一个字符读取出来,对应ascll赋值给ch
    fclose(fp);
    return 0;

fputc函数

  • 头文件:stdio.h
  • 原型: int fputs(const char *s,FILE * stream)
  • 参数:
    • stream: 指向 FILE 对象的指针。
    • s: 写入文件的字符
  • 作用: 向文件中写入一个字符或一个字节的数据,文件内部写指针会自动后移一个字节的位置。
  • 返回值:返回写入文件的字符的ASCII码值,出错时,返回EOF
	FILE *fp;
	int ch;
    fp = fopen("abc.txt", "r");//打开文件
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }
    fputc(ch,fp);//将ch写入文件
    fclose(fp);
    return 0;

fwrite函数

  • 头文件:stdio.h
  • 原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  • 作用: 把ptr所指向的数组中的数据写入到给定流stream中。
  • 参数:
    • ptr: 这是指向要被写入的元素数组的指针,获取数据地址。
    • size: 这是要被写入的每个元素的大小,以字节为单位。
    • nmemb: 这是元素的个数,每个元素的大小为 size 字节。
    • stream: 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
  • 返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
int main()
{
    
    
    FILE *fp;
    char msg[]="this is a test";
    char buf[20];
 
	fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }

    fwrite(msg,1,strlen(msg)+1,fp); //将msg写入文件fp中  
     
    fseek(fp,0,SEEK_SET);//将fp指针移动到文件开头处
 
    fread(buf,1,strlen(msg)+1,fp);//从文件中读取出来strlen(msg)+1个字节东西,放入buf中
 
    printf("%s\n",buf);

	fclose(fp); /* 关闭文件 */
	fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */

    system("pause");
    return 0;
}

fread函数

  • 头文件:stdio.h

  • 原型: size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

  • 作用: 从给定输入流stream读取最多count个对象到数组buffer中(相当于对每个对象调用size次fgetc),把buffer当作unsigned char数组并顺序保存结果。(也就是从文件中读取内容)

  • 注意: fread不区分文件尾和错误,因此调用者必须用feof和ferror才能判断发生了什么。

  • 参数:

    • buffer:
      指向要读取的数组中首个对象的指针
    • size
      每个对象的大小(单位是字节)
    • count
      要读取的对象个数
    • stream
      输入流
  • 返回值:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
    若size或count为零,则fread返回零且不进行其他动作。

  • 运用

int main()
{
    
    
    FILE *fp;
    char msg[]="this is a test";
    char buf[20];
 
	fp = fopen("abc.txt", "r+");/* 以读/写的方式打开,"abc.txt"文件 */
	if (NULL == fp) /* 打开失败 */
    {
    
    
        printf("错误!");
        exit(1); /* 中止程序 */
    }

    fwrite(msg,1,strlen(msg)+1,fp); //将msg写入文件fp中  
     
    fseek(fp,0,SEEK_SET);//将fp指针移动到文件开头处
 
    fread(buf,1,strlen(msg)+1,fp);//从文件中读取出来strlen(msg)+1个字节东西,放入buf中
 
    printf("%s\n",buf);

	fclose(fp); /* 关闭文件 */
	fp = NULL; /* 需要指向空,否则会指向原打开文件地址 */

    system("pause");
    return 0;
}

不够完整还请见谅,若有错误,还请指正。希望对你有所帮助,昂!!!

猜你喜欢

转载自blog.csdn.net/Y_peak/article/details/112156504