文件操作(C语言)(一)

简介: 从文件功能上讲可以分为两类:程序文件,数据文件

1.什么是文件

从文件功能上讲可以分为两类:程序文件,数据文件


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


数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。


1.1 文件名

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


文件名包含3部分:文件路径+文件名主干+文件后缀


例如: c:\code\test.txt


2.文件的打开与关闭

2.1 文件指针

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


声明的,取名FILE.


每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。



FILE* pf;

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件


2.2 文件的打开与关闭

我们在使用文件的时候需要对文件进行打开操作,使用结束后需要及时关闭,这里涉及两个函数:


2.2.1 fopen函数

fopen对文件起着打开的作用


FILE * fopen ( const char * filename, const char * mode );


这里filename对应着相应的文件名


mode表示打开文件的操作方式,如下

image.png



返回值:image.png


2.2.2 fclose函数

int fclose ( FILE * stream );这里stream对于着相应的文件指针


(关闭文件后要把文件指针置为空指针)


返回值:


image.png


实例展示:


#include <stdio.h>//使用File结构体类型需要包含头文件stdio.h
int main()
{
  FILE* pf = fopen("text.txt","w");
  int c = 'A';
  if (pf != NULL)
  {
  fputc(c , pf);
  }
  fclose(pf);
  pf = NULL;
  return 0;
}

我们这里进行写入文件操作,由于是用”w"的形式打开文件,这里会自动产生文件,我们这里把字符A写入文件,大家看效果。image.png


image.png




3.文件的顺序读写

image.png

3.1 fgetc函数和fputc函数

3.1.1fputc函数

int fputc ( int character, FILE * stream );


将字符写入流,将字符写入流并前进位置指示器。,字符写在流的内部位置指示器指示的位置,然后自动前进一


参数:1.character记录着要写入字符的ASCLL码,要编写的字符的 int 提升。

写入时,该值在内部转换为无符号字符。



2.stream指向标识输出流的 FILE 对象的指针。


返回值:成功后,将返回所写字符。如果发生写入错误,则返回 EOF 并设置错误指示器(ferror


3.1.2 fgetc函数

int fgetc ( FILE * stream );


fgetc的作用是将文件的内容读取到内存


参数:stream表示指向标识输入流的 FILE 对象的指针。


返回值:成功后,将返回字符读取(提升为 int 值)。返回类型为 int 以适应特殊值 EOF,该值表示失败:

如果位置指示器位于文件末尾,则该函数返回 EOF 并设置流的 eof 指示器 (feof)。

如果发生其他读取错误,该函数还会返回 EOF,但改为设置其错误指示器 (ferror)


实例展示:

#include <stdio.h>//使用File结构体类型需要包含头文件stdio.h
int main()
{
  FILE* pf = fopen("text.txt","w");
  int c = 'A';
  int i = 0;
  if (pf != NULL)
  {
  for (i = 0; i < 26; i++)
  {
    fputc(c, pf);
    c++;
  }
  }
  fclose(pf);
  pf = NULL;
  return 0;
}


这里我们给文件进行写入操作:


image.png


接下来我们进行读取操作:

#include <stdio.h>//使用File结构体类型需要包含头文件stdio.h
int main()
{
  FILE* pf = fopen("text.txt","r");//文件以读取的方式打开
  int c = 'A';
  int i = 0;
  if (pf != NULL)
  {
  for (i = 0; i < 26; i++)
  {
    int a = fgetc(pf);
    printf("%c", a);
  }
  }
  fclose(pf);
  pf = NULL;
  return 0;
}


结果展示:


image.png


3.2 fputs函数和fgets函数

3.2.1fputs函数

int fputs ( const char * str, FILE * stream );


fputs函数是将 str 指向流的 C 字符串写入流。该函数从指定的地址 (str) 开始复制,直到到达终止空字符 ('\0')。此终止空字符不会复制到流中。


参数:str:包含要写入流的内容的 C 字符串。


stream:指向标识输出流的 FILE 对象的指针。


返回值:成功时,将返回非负值。

出错时,该函数返回 EOF 并设置错误指示器(ferror)。


3.2.2 fgets函数

char * fgets ( char * str, int num, FILE * stream );


fgets函数是从流中读取字符并将其作为 C 字符串存储到 str 中,直到读取 (num-1) 个字符(最后一个位置会给你主动放入\0)或到达换行符或文件末尾,以先发生者为准。(对文件中的字符串一行一行进行处理。) 换行符使 fgets 停止读取,但它被函数视为有效字符,并包含在复制到 str 的字符串中。


参数:str:指向在其中复制字符串读取的字符数组的指针。


num:要复制到 str 的最大字符数(包括终止空字符)。


stream:指向标识输入流的 FILE 对象的指针。


返回值:成功后,函数返回 str。

如果在尝试读取字符时遇到文件末尾,则设置 eof 指示器 (feof)。如果在读取任何字符之前发生这种情况,则返回的指针为空指针(str 的内容保持不变)。

如果发生读取错误,则设置错误指示器(ferror),并返回空指针(但str指向的内容可能已更改)。


实例展示:


文件写入:


#include <stdio.h>//使用File结构体类型需要包含头文件stdio.h
int main()
{
  FILE* pf = fopen("text.txt","w");//文件以写入的方式打开
  int i = 0;
  if (pf != NULL)
  {
  fputs("hello world",pf);
  }
  fclose(pf);
  pf = NULL;
  return 0;
}

结果展示:


image.png


文件读取:


#include <stdio.h>//使用File结构体类型需要包含头文件stdio.h
int main()
{
  FILE* pf = fopen("text.txt","r");//文件以读取的方式打开
  char arr[20] = { 0 };
  if (pf != NULL)
  {
   if(fgets(arr,12, pf)!= NULL)
    puts(arr);
  }
  fclose(pf);
  pf = NULL;
  return 0;
}

结果如下:



image.png

相关文章
|
1月前
|
存储 编译器 C语言
关于文件操作---C语言
关于文件操作---C语言
|
1月前
|
存储 程序员 C语言
C语言-文件操作
C语言-文件操作
53 2
|
2月前
|
安全 算法 程序员
【C/C++ 文件操作】深入理解C语言中的文件锁定机制
【C/C++ 文件操作】深入理解C语言中的文件锁定机制
49 0
|
2月前
|
存储 编译器 数据库
【文件操作】C语言
【文件操作】C语言
|
2月前
|
C语言
C语言文件操作
C语言文件操作
18 0
C语言文件操作
|
2月前
|
C语言
C语言文件操作
C语言文件操作
|
1月前
|
存储 程序员 编译器
【C语言】深度探讨文件操作(一)
【C语言】深度探讨文件操作(一)
|
1天前
|
存储 程序员 C语言
C语言:文件操作
C语言:文件操作
7 1
|
2天前
|
存储 C语言 C++
【C语言】文件与文件操作
前言:我们通过学习的技术可以完成计算与字符串处理,但程序结束之后就都消失了,这样岂不可惜。我们通过文件与数据持久化保存相关的基础知识。
5 0
|
3天前
|
存储 编译器 C语言
C语言中的文件操作指南
C语言中的文件操作指南
10 0