☰
txt文件读写 【C语言】
2026/10/28 1:48:08 网站建设 项目流程

txt文件本质是二进制字节流(0、1)。英文和数字兼容ASCII码,汉字存储用UTF-8或GBK。

ASCII码:表中只有128个位置(低7位),用来存储英文、数字、基础符号

UTF-8:通常占3字节,“全球统一标准”,现代Linux、网络传输协议默认标准。目标把世界所有国家文字和符号分配唯一标号。

GBK:汉字通产占2字节,“中国汉字扩展规范”。

打开文件

FILE*fopen(constchar*_Filename,constchar*_Mode)
  • FILE *:返回文本地址,失败返回NULL
  • 下划线_是标准库头文件为了防止和用户代码中的局部变量重名而加的前缀。
  • _Filename:文件路径
  • _Mode打开模式:
    • “r”(只读)。文件不存在,fopen返回NULL。
    • “w”(覆盖写)
      • 文件不存在,新建一个
      • 文件已存在,清空原内容,重新写。
    • “a”(appen 追加写)
      • 文件不存在,新建一个。
      • 文件已存在,保留原内容,光标跳到文件末尾往后写。
    • 带“+”的模式
      • "r+":允许读和写(文件必须存在)。
      • "w+":允许读和写(若存在则清空,若不存在则新建)。
      • "a+":允许读取并在末尾追加。

文件的读取

(1)fgetc 函数
intfgetc(FILE*_File);
  • _File:传入fopen打开的文件指针。

fgetc的功能是从指定的文件中读取一个字符(1个字节),并将文件内部的读取位置向后移动一位。

#include<stdio.h>intmain(){FILE*fp;fp=fopen("test.txt","r");chara;a=fgetc(fp);printf("%c",a);//在控制台输出读取的字符}
全部读取

fgetc函数每读取一个字符,读取完成后文件指针向后移动一个位置,下一次读取就是第二个字符。通过循环来实现文件内容的全部读取。

intch;// 必须用int,不能写char,while((ch=fgetc(fp))!=EOF){putchar(ch);}

EOF是End Of File(文件结束符)缩写,是 C 语言标准库<stdio.h>中定义的一个宏常量。

#defineEOF(-1)
(2)fgets函数
char*fgets(char*_Buf,int_MaxCount,FILE*_File);
  • _Buf:缓冲区
  • _MaxCount:读取字符数量
  • _File:文件的地址
#include<stdio.h>intmain(void){FILE*fp=fopen("test.txt","r");charbuffebuffer[10];fgets(buffer,10,fp);//最大读取10个printf("%s",s);return0;}

文件写入

(1)fputc函数

只写单个字符

intfputc(int_Ch,FILE*_File);
  • _Ch:写入字符
  • _File:文件的指针
#include<stdio.h>intmain(){FILE*fp;fp=fopen("text.txt","w");fputc('s',fp);//写入一个字符sfclose(fp);}
(2)fputs函数

只写固定字符串

intfputs(constchar*_Str,FILE*_File);
  • 写入字符串首地址
  • 写入文件的指针
#include<stdio.h>intmain(void){FILE*fp=fopen("test.txt","a");fputs("Hello!\n",fp);fclose(fp);return0;}
(3)fprintf函数

fprintf与printf用法一致,仅增加了目标文件指针参数,用于将格式化数据定向输出至文件。

intfprintf(FILE*_stream,constchar*_format,argument...)
  • _stream:指定数据输出到哪个文件
  • _format:格式字符串
#include<stdio.h>intmain(void){FILE*fp=fopen("record.txt","w");intid=1001;charname[]="Su";fprintf(fp,"ID: %d、Name: %s \n",id,name);fclose(fp);fp=NULL;return0;}
(4)vfprintf 函数

用于接收可变参数列表并输出至文件的底层格式化函数。

intvfprintf(FILE*__stream,constchar*_format,__builtin_va_list __local_argv);

使用由va_start(或va_copy)初始化的va_list参数指针,按format格式化解析数据并写入目标文件流stream

与fprintf的区别:fprintf接收由逗号分隔的具体实参列表(...),而vfprintf接收打包好的参数指针变量(va_list)。

缓冲区刷新

intfflush(FILE*_File);

将内存缓冲区中暂存的数据立即写入目标文件。

#include<stdio.h>intmain(void){FILE*fp=fopen("run.log","a");fprintf(fp,"Critical event occurred.\n");// 强制刷入磁盘fflush(fp);fclose(fp);fp=NULL;return0;}

文件关闭

intfclose(FILE*_File);
  • _File:传入fopen打开的文件指针。

文件的指针定位

(1)rewind 函数
voidrewind(FILE*_File);
  • 功能:将文本文件的指针返回到文本的开始位置。

文件流缓冲区配置

intsetvbuf(FILE*stream,char*buffer,intmode,size_tsize);
  • stream:目标文件指针
  • buffer:用户自定义的缓冲区内存首地址
  • mode:缓冲模式枚举常量
    • _IOFBF(全缓冲):当缓冲区被填满,或调用fflush/fclose,才会向物理磁盘落盘。
    • _IOLBF(行缓冲):遇到换行符\n时立刻刷新写入。
    • _IONBF(无缓冲):不使用任何缓冲。
  • size:缓冲区字节数大小。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询