学习笔记---文件基础

本文详细介绍了C语言中的文件基础,包括文件的概念、分类、打开与关闭文件的方法,以及标准文件操作。内容涵盖文件结构、文件读写示意图、文件系统、标准文件读写方式、格式化读写、标准输入输出、文件随机读写和二进制文件的存储形式。还探讨了ASCII和二进制存储的优缺点,并给出了多个代码示例来展示文件操作的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件基础


概述


文件读写 常用函数
读/写 指定格式 以字符为单位
从文件读入 fscanf(文件指针,格式字符串,输入表列); int fgetc(FILE *fp);
写到文件中 fprintf(文件指针,格式字符串,输出表列); int fputc(int ch,FILE *fp);


概念:指存储在外部介质上的数据的集合

注:数据和程序都以文件的形式存放在外部介质上。操作系统以文件为单位对数据进行管理


文件名:路径+主名+扩展名


文件分类:

按文件类别:普通文件(文本文件、程序文件等)、设备文件(显示器、音响等)...

按存储介质:磁盘文件(存储在磁盘中的文件)、光盘文件(存储在光盘中的文件)、u盘文件(存储在U盘中的文件)...

按用途:程序文件(组成程序的文件)、数据文件(存储数据的文件)...

按文件中数据的组织形式:ASCII文件(以ASCII表示的文件,例如:.txt、.cpp、.c等以字符组成的文件)、二进制文件(用二进制形式表示的文件,可以是.o、.exe等程序文件,也可以是特定格式的数据文件如.mp3等)...


文件读写示意图:




文件系统:

标准文件系统:采用缓冲文件系统,系统自动为正在使用的文件开辟内存缓冲区

特点:为每个数据流开辟一个内存缓冲区,缓存区用于存放流中的数据,缓存区中的数据就是流。




非标准文件系统:不使用缓冲区的文件系统,由程序设计者在程序中为每个文件设定缓冲区


代码示例:

#include <stdio.h>
#include <stdlib.h>
/*这个程序用来测试输入缓存区*/
int main()
{
    int n[5],i;
    for(i=0;i<5;i++)
    {
        scanf("%d",&n[i]);
        printf("%d\n",n[i]);
    }
    return 0;
}
结果:


解析:

如上,一次性输入1到5的数字,都被存入了输入缓存区。在程序运行过程中从输入缓存区中逐个读取出来,并输出。


文件结构及打开关闭文件


文件结构


定义:内存会为每个使用中的文件开辟一段区域用于存放其信息。而文件的信息将作为一个结构体被保存在内存中。


C语言中的文件结构体:

为了方面对文件进行操作,C语言在stdio.h头文件中已经定义好了文件的结构体。

其具体代码如下:

typedef struct _iobuf
{
    char* _ptr;//指向buffer中第一个未读的字节(buffer即缓存区)
    int _cnt;//记录剩余未读字节的个数
    char* _base;//记录该文件的缓存区的地址
    int _flag;//记录打开的文件的一些属性值
    int _file;//用于获取文件的描述
    int _charbuf;//单字节的缓冲
    int _bufsiz;//缓冲区的大小
    char* _tmpfname;//由系统访问的临时文件名
}FILE;
只要在程序中调用了stdio.h头文件,就可以直接使用该自定义类型来方面的操作文件。

如:

FILE *fp;
以上代码段即定义一个指向FILE类型的指针,该指针也被称为“文件指针”。使用这种指针,可以配合C语言中的各种文件操作函数方面快捷的对文件进行操作。


打开文件


定义:为文件流对象和指定的磁盘文件建立关联,并指定文件的工作方式(只读、只写、追加等)


方式:FILE *fp = fopen("文件地址","打开方式");


注1:以上fopen函数为C语言中打开一个磁盘文件的函数。其中文件地址的格式为:"file.txt"或"c:\\dict\\dictionary.dat".前者只写文件名,则默认文件和程序在同一目录下。后者加上了地址,则文件在指出的地址目录下。

注2:以上打开方式除常用的只读只写追加外还有多种,其中的区分将在以下解析。


打开文件的方式
方式 文件类型和操作要求
r 只读打开一个文本文件,只允许读数据
w 只写打开或建立一个文本文件,只允许写数据
a 追加打开一个文本文件,并在文件末尾写数据
rb 只读打开一个二进制文件,只允许读数据
wb 只写打开或建立一个二进制文件,只允许写数据
ab 追加打开一个二进制文件,并在文件末尾写数据
r+ 读写打开一个文本文件,允许读写
w+ 读写打开或建立一个文本文件,允许读写
a+ 读写打开一个文本文件,允许读,或在文件末尾追加数据
rb+ 读写打开一个二进制文件,允许读和写
wb+ 读写打开或建立一个二进制文件,允许读和写
ab+ 读写打开一个二进制文件,允许读,或在文件末尾追加数据

注3:以上r+w+的区别在于,当文件不存在时,r+方式会打开失败,而w+方式会新建一个文件。


注4:以上b(banary)代表二进制文件,而t(text)代表文本文件。t是默认的。所以rt写为r


注5:使用fopen打开文件时,当使用r方式且文件不存在。或使用w方式且磁盘损坏无法建立新文件时,打开文件会失败。此时需要对此进行异常处理。如:

if(fp=fopen("file.txt","w")==NULL)
{
    printf("error!cannot open file.txt!\n");
    exit(1);
}


关闭文件


定义:当对文件的操作完成时,需要关闭文件,将缓冲区中的数据妥善处理,解除磁盘文件与文件流的关联,不再通过文件流对该文件进行输入或输出。


方式:fclose(文件指针);


如:

int main()
{
    int a[10];
    FILE *fp;
    fp=fopen("file.txt","w");
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值