当前位置: 首页 > news >正文

C语言基础知识09---文件操作

目录

文件操作

1.1 文件操作

1.2 文件操作的数据传输形式

1.3 文件操作的分类

1.4 文件存储格式

1.5 文件流指针

1.6 函数名:fopen()

1.7 函数名:fclose()

1.8 函数名:fprintf()

1.9 函数名:fscanf()

1.10 函数名:fseek()

1.11 函数名:feof()

1.12 示例

1.13 练习

1.14 函数名:fwrite()

1.15 函数名:fread()

1.16 函数名:ftell()

1.17 函数名:rewind()

1.18 函数名:fputs()

1.19 函数名:fgets()

1.20 函数名:fputc()

1.21 函数名:fgetc()

1.22 函数名:remove()


文件操作

1.1 文件操作

        1.创建、打开文件---默认情况下光标在文件开头,也可以采用追加,光标在文件末尾

        2.读写---通过光标进行定位,光标会跟随移动,写入内容只有覆盖模式

        3.关闭文件

1.2 文件操作的数据传输形式

数据的写入:从内存到硬盘

数据的读取:从硬盘到内存

1.3 文件操作的分类

基于缓冲区的文件操作---高级IO---基于低级IO实现的函数封装

基于非缓冲区的文件操作---低级IO---Linux系统编程阶段---内核函数

1.4 文件存储格式

Linux文件类型:d - p l s c b

文件后缀:文件的打开方式

文件存储格式:ASSIC码存储、二进制存储

1.5 文件流指针

FILE *fp;

文件打开成功后,fp在后续操作中就代表该文件

1.6 函数名:fopen()

 函数原型:FILE *fopen(const char *pathname, const char *mode);

函数功能:打开文件

函数参数:const char *pathname:路径/文件名的字符串

                  const char *mode:打开方式,填入常量字符串 

                  r 读 打开旧文件 

                  w 写 创建新文件 

                  a 追加 打开旧文件/创建新文件 

                  + 扩展功能

                        “r” 只读 “r+” 读写 

                        “w” 只写 “w+” 读写 

函数返回值:打开成功,返回文件流指针,打开失败,返回 NULL

函数使用:

                FILE *fp = fopen(“./1.txt”, “w+”); 

1.7 函数名:fclose()

函数原型:int fclose(FILE *stream);

函数功能:关闭文件

函数参数:FILE *stream:文件流指针

函数返回值:成功返回 0,失败返回 EOF/-1

函数使用:

        fclose(fp);

1.8 函数名:fprintf()

函数原型:int fprintf(FILE *stream, const char *format, ...);

函数功能:格式化写入

函数参数:FILE *stream:文件流指针

const char *format, ... :同 printf()

函数返回值:输出的字符个数

函数使用:

fprintf(fp, “hello\n”);

1.9 函数名:fscanf()

函数原型:int fscanf(FILE *stream, const char *format, ...);

函数功能:格式化读取

函数参数:FILE *stream:文件流指针 const char *format, ... :同 scanf()

函数返回值:返回值返回格式控制符获取到的数据个数

函数使用:

1.10 函数名:fseek()

函数原型:int fseek(FILE *stream, long offset, int whence);

函数功能:移动光标

函数参数:FILE *stream:文件流指针

long offset:偏移量 正数向后偏移 负数向前偏移

int whence:基准位置

0 文件开头 SEEK_SET

1 当前位置 SEEK_CUR

2 文件末尾 SEEK_END

函数返回值:成功返回 0,失败返回-1

函数使用:

fseek(fp,0,0);

fseek(fp,-2,2);

1.11 函数名:feof()

函数原型:int feof(FILE *stream);

函数功能:判断光标是否在文件末尾

函数参数:FILE *stream:文件流指针

函数返回值:如果在末尾是非 0,不在末尾是 0

函数使用:

while(a[i]!=0)

while(feof(fp)==0) 判断光标是否在文件末尾

{

fscanf();

}

1.12 示例

#include <stdio.h>
#include <string.h>
int main()
{
 char path[30] = {0};
 printf("输入文件名:\n");
 gets(path);
 FILE *fp = fopen(path, "w+"); 
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
 fprintf(fp, "hello\n");
 char a[30] = {0};
 scanf("%s", a);
 fprintf(fp, "%s\n", a);
 
 //rewind(fp);
 fseek(fp, -(strlen(a)+1), SEEK_CUR);
 char b[30] = {0};
 fscanf(fp, "%s\n", b);
 printf("%s\n", b);
 char c[30] = {0};
 fscanf(fp, "%s\n", c);
 printf("%s\n", c);
 
 fclose(fp);
 return 0;
}

1.13 练习

1. 向文件 stu.xlsx 中写入几个姓名学号

比如:

        张三 1 

        李四 2

#include <stdio.h>
int main()
{
 FILE *fp = fopen("./stu.xlsx", "w");
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
 fprintf(fp, "%s\t%d\n", "张三", 1);
 fprintf(fp, "%s\t%d\n", "李四", 2);
 fclose(fp);
 
 return 0;
}

2. 从文件中把信息读取出来保存到数组中,然后打印

#include <stdio.h>
struct info{
 char name[20];
 int id;
};
struct info stu[50];
int main()
{
 FILE *fp = fopen("./stu.xlsx", "r");
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
 //rewind(fp);
 fseek(fp, 0, 0);
 int i = 0;
 while(feof(fp) == 0)
 {
 fscanf(fp, "%s\t%d\n", \
 stu[i].name, &stu[i].id);
 i++;
 }
 for(int j=0; j<i; j++)
 {
 printf("%s\t%d\n", \
 stu[j].name, stu[j].id);
 }
 fclose(fp);
 
 return 0;
}

1.14 函数名:fwrite()

函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

函数功能:块写

函数参数:const void *ptr:数据块的起始地址

size_t size:数据块大小

size_t nmemb:数据块数量

FILE *stream:文件流指针

函数返回值:返回写入的块数量

函数使用:

#include <stdio.h>
int main()
{
 FILE *fp =fopen("9.txt","w+");
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
 int a[5]={1,2,3,4,5};
 fwrite(a,10,2,fp);
 
 fclose(fp);
 return 0;
}

1.15 函数名:fread()

函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

函数功能:块读

函数参数:const void *ptr:数据块的起始地址

size_t size:数据块大小

size_t nmemb:数据块数量

FILE *stream:文件流指针

函数返回值:返回读取的块数量

函数使用:

#include <stdio.h>
int main()
{
 FILE *fp =fopen("9.txt","r+");
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
 fseek(fp,4,SEEK_SET);
 int a[5]={0};
 fread(a,2,10,fp);
 for(int i=0;i<5;i++)
 {
 printf("%d\n",a[i]);
 }
 
 fclose(fp);
 return 0;
}

1.16 函数名:ftell()

函数原型:long ftell(FILE *stream);

函数功能:用于定位光标当前所在位置

函数参数:FILE *stream:文件流指针

函数返回值:返回光标当前所在位置(距离文件开头的字节数)

函数使用:

ftell(fp);

1.17 函数名:rewind()

函数原型:void rewind(FILE *stream);

函数功能:把光标移动到文件开头

函数参数:FILE *stream:文件流指针

函数返回值:无

函数使用:

rewind(fp); == fseek(fp,0,0);

1.18 函数名:fputs()

函数原型:int fputs(const char *s, FILE *stream);

函数功能:向文件写入一个字符串

函数参数:const char *s:字符串首地址

FILE *stream:文件流指针

函数返回值:字符串的字符个数

函数使用:

1.19 函数名:fgets()

函数原型:char *fgets(char *s, int size, FILE *stream);

函数功能:从文件读取 size-1 个字符,字符串形式

函数参数:char *s:字符串保存的位置

int size:读取的字符个数(因为是获取字符串,所以会消耗一个空间保存’\0’)

FILE *stream:文件流指针

函数返回值:成功返回 s 的值

函数使用:

#include <stdio.h>
int main()
{
 FILE *fp =fopen("10.txt","w+");
 if(fp == NULL)
 {
 perror("fopen");
 return 0;
 }
char a[10]="hello";
 fputs(a,fp);
 char buff[10]={0};
 rewind(fp);
 fgets(buff,6,fp);
 puts(buff);
 
 char b[30]={0};
 fgets(b,30,stdin);
 fputs(b,stdout);
 
 fclose(fp);
 return 0;
}

1.20 函数名:fputc()

函数原型:int fputc(int c, FILE *stream);

1.21 函数名:fgetc()

函数原型:int fgetc(FILE *stream);

1.22 函数名:remove()

函数原型:int remove(const char *pathname);

函数功能:删除文件

相关文章:

  • ai画图comfyUI 选中替换inpaint。
  • JavaScript的作用域
  • Python @property 装饰器深度使用教程
  • 基于python的汽车行业大数据分析系统
  • Causal Effect Inference withDeep Latent-Variable Models
  • Docker安装MySql 8.0
  • 暴力搜索算法详解与TypeScript实战
  • JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验
  • Manus AI 与多语言手写识别技术解析
  • MFC TRACE 宏的使用说明
  • MaskFormer语义分割算法测试
  • 剑指Offer29 -- 模拟
  • 视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案
  • onlyoffice实现office文件在线编辑保存
  • Docker 安装部署Harbor 私有仓库
  • Nginx 优化
  • CentOS与Ubuntu命令对比指南:从软件包管理到系统配置
  • 面向对象——开闭原则(Open-Closed Principle, OCP)
  • Spring 及 Spring Boot 条件化注解(15个)完整列表及示例
  • matlab仿真MIMO天线
  • 网站建设作业指导书/seo网站排名优化服务