栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言文件读、写、定位函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言文件读、写、定位函数

文章目录
  • 文件函数
    • 文件的读
      • fgetc(读一个字符)
      • fgets(读一行字符串)
      • fread(读指定字节数的字符串)
    • 文件的写
      • fputc(写入一个字符)
      • fputs(写入一个字符串)
      • fwrite(指定字节数写入)
    • 文件的定位
      • rewind(fp)
      • ftell(fp)
      • fseek

文件函数

文件的读 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时,将读取的字符后面自动添加’’字符,若有换行符,则将换行符保留(换行符在’’字符之前)。若有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
#include

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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号