C语言文件处理函数——没有更详细的了

文件函数(文本文件)

在这里插入图片描述

文件的读

fgetc(读一个字符)

// 函数原型
int fgetc(
FILE *stream     //指向文件结构的指针
);
  1. fgetc 返回作为 int 读取的字符,或返回 EOF 以指示错误或文件尾。
  2. 这个函数读取完会将文件指针移动到下一个字符。
while(EOF != (ch = fgetc(fp))){     //可读取文件全部字符
		printf("%c",ch);            //若输出出现乱码,可调整文件编码为ANSI
	}

fgets(读一行字符串)

// 函数原型
char *fgets(
   char *str,           //数据的存储位置。
   int numChars,        //要读取的最大字符数。      
   FILE *stream         //指向 FILE 结构的指针
);
  1. 函数被调用时,最多读取n-1个字符,并将读入的字符串存入指针str所指向内存地址开始的n-1个连续的内存单元中。

  2. 当函数读取到字符串达到指定的个数、或接收到换行符、或接收到文件结束标志EOF时,将读取的字符后面自动添加’\0’字符,若有换行符,则将换行符保留(换行符在’\0’字符之前)。若有EOF,则不保留EOF。

  3. 执行成功,函数会将读到的字符串自动返回 str。执行失败,则返回 NULL 指示错误或文件尾条件。

  4. 函数读取完会将文件指针移动到字符串的下一个字符。

char str[100];
while(fgets(str,100,fp) != NULL){     //可读取文件全部内容
		printf("%s",str);
	}

fread(读指定字节数的字符串)

//函数原型
size_t fread(
   void *buffer,    //数据的存储位置。
   size_t size,     //项目大小(以字节为单位),即每次读多少个字节。
   size_t count,    //要读取的项目的最大数量,即读多少次。
   FILE *stream     //指向 FILE 结构的指针。
);

fread 返回实际读取的完整项数,在达到 buffer * size 前如果发生错误或遇到文结件尾,该数字可能小于 buffer * size,若读完则返回0。

// 读取文件全部内容。
char str[100] = {0};
while(fread(str,1,99,fp)){
    printf("%s",str);
}

文件的写

以w、w+打开文件时,文件会清空。

fputc(写入一个字符)

//函数原型
int fputc(
   int c,               //要写入的字符。
   FILE *stream         //指向文件结构的指针。
);

函数会返回写入的字符。fputc,返回值 EOF 表示错误。

fputs(写入一个字符串)

//函数原型
int fputs(
   const char *str,         //输出字符串。
   FILE *stream             //指向 FILE 结构的指针。
);

如果成功,函数将返回一个非负值。发生错误时,fputs将返回EOF。

char*str = "abcdefghijklmnopqrstuvwxyz";
fputs(str,fp);

fwrite(指定字节数写入)

//函数原型
size_t fwrite(
   const void *buffer,      //指向要写入的数据的指针。
   size_t size,
   size_t count,
   FILE *stream
);

fread 返回实际写入的完整项数,在达到 buffer * size 前如果发生错误或遇到文结件尾,该数字可能小于 buffer * size。

//写入数字
int num = 12345;
fwrite(&num,1,sizeof(num),fp);
//写入结构体
struct student{
    int num;
    char name[];
    int grade; 
};
struct student a = {1,"xjh",100};
fwrite(&a,1,sizeof(a),fp);

文件的定位

rewind(fp)

将文件指针重置到文件的开头

ftell(fp)

返回当前位置

fseek

//函数原型
int fseek(
   FILE *stream,     //指向 FILE 结构的指针。
   long offset,      //从origin开始,往后的字节数。
   int origin        //初始位置。
);

如果成功,则 fseek 返回 0。 否则,返回一个非零值。

origin的值只能为

原始值含义
SEEK_CUR文件指针的当前位置。
SEEK_END文件结尾。
SEEK_SET文件开头。
fseek(fp,-10,SEEK_CUR);    //将指针定位到当前位置向前10个字节的位置
fseek(fp,5,SEEK_SET);      //将指针定位到文件开头向后5个字节的位置
fseek(fp,-10,SEEK_END);    //将指针定位到文件末尾向前10个字节的位置
// 实现输出最后一行
#include<stdio.h>
#include<stdlib.h>

int main(){
   FILE*fp = fopen("C:\\Users\\1\\OneDrive\\桌面\\z.txt","r+");
   if(fp == NULL){
      printf("打开文件失败.\n");
   }	

   int Length = -1;
   char Find;
   fseek(fp,Length,SEEK_END);
   while(fread(&Find,1,1,fp)){
      if(Find == '\n'){
         break;
      }
      Length--;
      fseek(fp,Length,SEEK_END);
   }
   jiLu++;
   fseek(fp,jiLu,SEEK_END);
   char str[100] = {0};
   fgets(str,99,fp);
   printf("%s",str);

   fclose(fp);

	system("pause");
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjhdsg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值