文件(一)——C语言(上)

简介: 文件(一)——C语言

目录

文件概念

文件名

文件指针

文件的关闭和打开

打开方式:

fopen():打开文件

fclose():文件关闭

文件的顺序读写

写文件(fputc)  

读文件(fgetc)

字符串读(fgets)

字符串写(fputs)

     格式化写(fprintf)

格式化读(fscanf)

sprintf和sscanf

文件概念

 在程序运行时,常常需要将一些数据(运行的最终结果和中间数据)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计算机内存。这就要用到磁盘文件

C语言把文件看作是一个字符(字节)的序列,即一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件二进制文件ASCII文件又称文本文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

       在过去使用的C版本(如UNIX系统下使用的C)有两种对文件的处理方法:一种叫“缓冲文件系统”,一种叫“非缓冲文件系统”。所谓缓冲文件系统是指系统自动地在内存中为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。缓冲区的大小由各个具体的C版本确定,一般为512字节。

image.png


文件名

一个文件要有唯一的文件标识,以便用户识别和使用

文件名包括三部分,文件路径+文件名主干+文件后缀

例如:c:codetest.txt

文件指针

 缓冲文件系统中,关键的概念是“文件指针”。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统定义的,取名为FILE。

文件的关闭和打开

打开方式:

文件使用方式

含义

如果指定的文件不存在

"r"(只读)

为了输入数据,打开一个已存在的文本文件。

出错

"w"(只写)

为了输出数据,打开一个文本文件。

建立一个新文件

"a"(追加)

向文本文件尾添加数据

出错

"rb"(只读)

为了输入数据,打开一个二进制文件。

出错

"wb"(只写)

为了输出数据,打开一个二进制文件。

建立一个新文件

"ab"(追加)

向二进制文件尾添加数据

出错

"r+"(读写)

为了读和写,打开一个文本文件

出错

"w+"(读写)

为了读和写,建立一个新的文件

建立一个新文件

"a+"(读写)

打开一个文件,在文件尾进行读写

建立一个新文件

"rb+"(读写)

为了读和写,打开一个二进制文件

出错

"wb+"(读写)

为了读和写,新建一个新的二进制文件

建立一个新文件

"ab+"(读写)

打开一个二进制文件,在文件尾进行读和写

建立一个新的文件

fopen():打开文件

fopen():文件打开操作

头文件:stdio.h

函数定义:FILE *fopen(char *pname, char *mode)

函数说明:pname是文件名,mode是打开文件的方式

#include<stdio.h>
int main()
{
  fopen("test.txt", "r");
  return 0;
}

打开文件的作用是:

(1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;

(2)开辟一个缓冲区;

(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

FILE *:指出fopen是一个返回文件类型的指针函数;


 返回值

  正常返回:被打开文件的文件指针。

  异常返回:NULL,表示打开操作不成功。

关闭:

fclose():文件关闭

函数定义:int fclose(FILE *fp);

函数说明:fp是一个以打开的文件的文件指针

返回值:

正常返回:0

异常返回:EOF,表示文件在关闭时发生错误

文件的顺序读写

       功能               函数名   适用于

字符输入函数

                fgetc

                所有输入流

字符输出函数

                fputc

                所有输出流

文本行输入函数

                fgets

                所有输入流

文本行输出函数

                fputs

               所有输出流

格式化输入函数

              fscanf

               所有输入流

格式化输出函数

              fprintf

               所有输出流

二进制输入

                fread

                   文件

二进制输出

              fwrite

                   文件

 

写文件(fputc)

描述

C 库函数 int fputc(int char, FILE *stream) 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。

声明

下面是 fputc() 函数的声明。

int fputc(int char, FILE *stream)

参数

  • char -- 这是要被写入的字符。该字符以其对应的 int 值进行传递。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。

返回值:

如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。

#include<stdio.h>
#include<string.h>
int main()
{
  FILE*pf=fopen("test.txt", "w");
  if (pf == NULL)
  {
    printf("%s\n", strerror(errno));
    return 0;
  }
  fputc('b', pf);
  fputc('i', pf);
  fputc('t', pf);
  fclose(pf);
  return 0;
}

读文件(fgetc)

描述

C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。

声明

下面是 fgetc() 函数的声明。

int fgetc(FILE *stream)

参数

  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。

返回值

该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

#include<stdio.h>
#include<string.h>
int main()
{
  FILE*pf=fopen("test.txt", "r");
  if (pf == NULL)
  {
    printf("%s\n", strerror(errno));
    return 0;
  }
  printf("%c", fgetc(pf));
  printf("%c", fgetc(pf));
  printf("%c", fgetc(pf));
  fclose(pf);
  return 0;
}

键盘-——标准输入设备——stdin

屏幕——标准输出设备——stdout

是一个程序默认打开的两个流设备

int main()
{
  int ch=fgetc(stdin);//从键盘上输入
  fputc(ch,stdout);//从屏幕上输出
  return 0;
}
相关文章
|
9天前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
9天前
|
存储 编译器 C语言
C语言:文件缓冲区刷新方式有几种
C语言中文件缓冲区的刷新方式主要包括三种:自动刷新(如遇到换行符或缓冲区满)、显式调用 fflush() 函数强制刷新、以及关闭文件时自动刷新。这些方法确保数据及时写入文件。
|
28天前
|
C语言
【C语言】探索文件读写函数的全貌(三)
【C语言】探索文件读写函数的全貌
|
28天前
|
存储 C语言
【C语言】探索文件读写函数的全貌(二)
【C语言】探索文件读写函数的全貌
|
28天前
|
C语言
【C语言】探索文件读写函数的全貌(一)
【C语言】探索文件读写函数的全貌
|
28天前
|
存储 文件存储 C语言
【C语言】深入了解文件:简明指南
【C语言】深入了解文件:简明指南
|
2月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
3月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
48 15
|
3月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
3月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理