C语言文件操作

目录

什么是文件?

程序文件

数据文件

数据文件的分类

文件的打开和关闭 

标准流

文件指针

创建文件指针

打开和关闭

文件的顺序读写 

介绍

文件的随机读写

fseek

概念

例子

 ftell

概念

例子

rewind

概念

例子

文件读取结束的判定

feof

文件缓冲区


什么是文件?

磁盘上的文件是文件。

但在程序设计中,我们一般谈论的文件从功能的角度来分类的话,一般分为两种:程序文件、数据文件。

程序文件

程序文件包括源文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。

数据文件

文件的内容不一定是程序,而是程序运行时读写的程序。而在这篇博客里,我们将要了解的是数据文件。

数据文件的分类

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

如果要求在外存上以ASCII形式存储,则需要在存储前转换。以ASCII的形式存储的文件就是文本文件。

如果由整数10000,如果ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制输出,则在磁盘上只占4个字节。

文件的打开和关闭 

C程序针对文件、画画、键盘等数据输入输出操作都是通过流操作的。

一般情况下,我们想要向流里写数据,或者从流中读取数据,都是打开流,然后操作。

标准流

  1. stdin-标准输入流,在大多数环境中从键盘输入,scanf函数就是从标准输入流中读取数据。
  2. stdout-标准输出流,在大多数环境中输出至显示器界面,printf函数就是将信息标准输出到流中。
  3. stderr-标准错误流,大多数环境中输出到显示器界面。

stdin、stdout、stderr三个流的类型是:FILE*,通常称为文件指针。

C语言中,就是通过FILE*的文件指针来维护着各种流的操作的。

文件指针

缓冲文件系统中,关键的概念是”文件类型指针“,简称为”文件指针“。

创建文件指针

FILE* pf;

定义pf是一个指向FILE类型数据的指针变量。可以使得pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区的信息就能够该访问文件。

也就是说通过文件指针变量能够间接找到与它相关的文件。

打开和关闭

文件在读写前应该先打开文件,在使用结束之后关闭文件

ANSIC规定使用fopen函数打开文件,fclose关闭文件。

例子如下

#include <stdio.h>
int main()
{
    FILE* p;
    p = fopen("myfile.txt","w");
    if(p != NULL)
    {
        fputs("fopen example", p);
        fclose(p);
    }
    return 0;
}
   

文件的顺序读写 

介绍

函数名功能适用于
fgets字符输入函数所有输入流
 fputs字符输出函数所有输出流
fgets文本行输入函数所有输入流
fputs文本行输出函数所有输出流
fscanf格式化输入函数所有输入流
fprintf格式化输出函数所有输出流
fread二进制输入文件
fwrite二进制输出文件

文件的随机读写

fseek

概念

根据文件指针的位置和偏移量来定义文件指针。

例子
#include <stdio.h>
int main()
{
    FILE* p;
    p = fopen("myfile.txt", "wb");
    fputs("This is an apple.", p);
    fseek(p, 9, SEEK_SET);
    fputs("sam", p);
    return 0;
}

 ftell

概念

返回文件指针相对于起始位置的偏移量

例子
#include <stdio.h>
int main ()
{
    FILE * pFile;
    long size;
    pFile = fopen ("myfile.txt","rb");
    if (pFile==NULL)
        perror ("Error opening file");
    else
    {
        fseek (pFile, 0, SEEK_END); // non-portable
        size=ftell (pFile);
        fclose (pFile);
        printf ("Size of myfile.txt: %ld bytes.\n",size);
    }
    return 0;
}

rewind

概念

让文件指针的位置回到文件的起始位置

例子
#include <stdio.h>
int main ()
{
    int n;
    FILE * pFile;
    char buffer [27];
    pFile = fopen ("myfile.txt","w+");
    for ( n='A' ; n<='Z' ; n++)
        fputc ( n, pFile);
    rewind (pFile);
    fread (buffer,1,26,pFile);
    fclose (pFile);
    buffer[26]='\0';
    printf(buffer);
    return 0;
}

文件读取结束的判定

feof

在文件读取过程中,不能用feof函数的返回值直接判断文件的是否结束。

feof的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束

文件缓冲区

因为有缓冲区的存在,C语言在操作文件的时候,需要刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做,可能导致读写文件的问题。

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值