C语言常见文件操作函数总结详解

简介: C语言常见文件操作函数总结详解

1.fopen


fopen是常见的一个文件操作函数,用来打开文件:

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

我们从函数的声明上可以看的出来函数的第一参数是字符串常量的一个文件名字,第二个参数是文件的打开模式,就是我们要以某种方式来访问这个文件。打开文件成功之后,返回一个函数流指针FILE*的这样一个指针类型,如果打开文件失败,返回NULL,关于第二个参数,我们来看一下常见的一些参数:

mode

access

"r"

以只读的方式打开文件,也就是不能修改文件中的内容,文件必须存在,如果不存在,打开失败

"w"

打开一个空文件进行写入,注意,如果文件存在,那么其中的内容就会被清空

"a"

在原文件末尾写入文件内容,如果该文件不存在,那么就会创建这个文件

"r+"

以读写方式打开文件,文件必须存在,如果不存在,打开失败

"w+"

以读写方式打开文件,如果文件中本来有内容,则会被清空

"a+"

可以读取文件以及在文件末尾附加,如果文件不存在,则创建新文件

"t"

以文本方式打开文件

"b"

以二进制形式打开文件

代码示例:

FILE* File = NULL;//  文件流指针  初始化为NULL
  File = fopen("User.txt", "r");//以只读方式打开文件,并且文件必须存在
  if (File == NULL)
  {
  printf("User数据文件不存在:\n");
  return -1;
  }


2.fread


fopen结束之后,正常情况下我们可以得到一个文件流指针,那么我们需要对这个指针指向的数据进行读操作的时候,就会用到fread函数,这个函数的主要功能就是从一个流中读取数据。

size_t fread(
   void *buffer,
   size_t size,
   size_t count,
   FILE *stream
);

我们可以看到四个参数,第一个参数是需要把读出来数据保存到我们的数据缓冲区中去,这个缓冲区我们自己申请内存或者声明字符数组,第二个参数是按照多大来读取,这里设置的是按照1个字节来读取,第三个参数是我们读取的最大数目,比如我们的第二参数是1个字节,第三参数是8次,那就是读8个字节,如果第二参数是2个字节,那就是最大读取16个字节,第四个参数是我们之前获得的文件流指针。返返回值是一个size_t类型的数据,告诉我们读了的次数,可能小于等于第三参数count。看一个使用的举例:

char  Signature[8] = { 0 };
  fseek(fh, 0, SEEK_SET);
  int NumberRead = fread(Signature, sizeof(char), 8, fh);

3.fseek


fseek是要将文件指针移动到我们指定的位置上去,因为我们在使用文件指针进行读取操作时候,会造成文件指针的移动,这时候比如我们要去再次读取文件开头的内容,那么文件指针已经移动,我们该如何读取呢,使用fseek将指针移动到我们想让它去到的地方。

int fseek(
   FILE *stream,
   long offset,
   int origin
);


这个函数声明我们可以看到第一个参数是文件流指针,第二个参数是起始字节数,也就是说我们要第三参数origin的相对字节偏移,第三个参数是定位到的初始位置。对于第三参数,有以下三种可能:

origin vale

意义

SEEK_CUR

文件指针的当前位置

SEEK_END

文件末尾

SEEK_SET

文件开始

下面来看一个简单的例子:

fseek(File, 0, SEEK_SET);//重置文件指针到初始位置

4.fclose


fclose是用来关闭打开的一个文件流指针,我们对文件操作完毕之后,一定要记得关闭当前的文件流指针,否则可能在后续对该文件再进行操作的时候出现一些错误。

int fclose(
   FILE *stream
);

这个函数看起来很简单的,它就是传入需要关闭的文件流指针,然后关闭成功之后,会返回0。

使用就很简单:

fclose(File);

5.feof


feof这个函数是用来测试一个流指针是否已经到了文件的末尾,我们有时候需要遍历文件中所有内容时候,就可以用这个函数来进行判断:

int feof(
   FILE *stream
);

这个函数的参数和fclose是一样的,都只需要传入一个文件流指针来进行判断就ok了。如果读取操作试图读取超过文件末尾的内容,则feof函数返回一个非零值;否则返回0。

while (!feof(File))//判断是否读到文件结尾
  {
  //做一些操作
  }

如果一个文件包含39个字节,而您从文件中读取了39个字节,那么feof将返回0,因为即使文件指针位于文件的末尾,您也没有尝试读取超过末尾的内容。只有当你尝试读取第40个字节时,才会返回一个非零值。


6.fscanf


fscanf和scanf的用法其实是比较相似的,它可以从文件流中把数据读取到我们的buffer缓冲区中来,使用一定的格式限制。

int fscanf(
   FILE *stream,
   const char *format [,
   argument ]...
);

比如下面的这个测试就是用一个正则的限制,每遇到一个逗号,就把文件中的内容读到对应的buffer中去

fscanf(File, "%[^,]%*c %[^,]%*c %[^,]%*c %[^,]%*c %[^,]%*c %[^\n]%*c",
    UserInfo.U_ID,
    UserInfo.U_Name,
    UserInfo.U_PassWord,
    UserInfo.U_PhoneNumber,
    UserInfo.U_Addr,
    Money
  );

fscanf函数从流的当前位置读取数据到参数指定的位置(如果有的话)。每个参数必须是一个指向与格式中类型说明符相对应的类型变量的指针。


7.fprintf


那既然有fscanf,那肯定就得有fprintf啊,不然的话,那不是搞得有点偏心了吗,所以微软也设计了fprintf函数。

int fprintf(
   FILE *stream,
   const char *format [,
   argument ]...
);

这个也是和printf差不多,就是把一个buffer缓冲区的数据,以一个规定的格式输入到文件流中去,比如下面这个例子就是把字符串输入到文件流所指之处去!

fprintf(File, "%s", BufferData);


8.fgets


fgets是每次从所给流指针中读取一行数据读到缓冲区中去,声明如下:

_ACRTIMP char* __cdecl fgets(
        _Out_writes_z_(_MaxCount) char* _Buffer,
        _In_                      int   _MaxCount,
        _Inout_                   FILE* _Stream
        );

总共三个参数,第一个是一个buffer,到时候需要把数据就读取到这里,第二个是最大的读取字节数,第三个是流指针。具体的使用举例如下:

fgets(BufferData, 1024, File)

有关文件操作系列的函数呢,常见的我今天想起来的也就是这些了,如果日后再想起来了,再继续在这里更行这篇文章,好久没更新C/C++专栏了,最近确实是比较忙,有想写个完整项目的兄弟,可以去支持一下:https://download.csdn.net/download/qq_42253797/20416914?spm=1001.2014.3001.5503


目录
相关文章
|
19天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
30 3
|
9天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
30 10
|
3天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
4天前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
9 2
|
8天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
32 7
|
8天前
|
存储 编译器 程序员
【c语言】函数
本文介绍了C语言中函数的基本概念,包括库函数和自定义函数的定义、使用及示例。库函数如`printf`和`scanf`,通过包含相应的头文件即可使用。自定义函数需指定返回类型、函数名、形式参数等。文中还探讨了函数的调用、形参与实参的区别、return语句的用法、函数嵌套调用、链式访问以及static关键字对变量和函数的影响,强调了static如何改变变量的生命周期和作用域,以及函数的可见性。
22 4
|
13天前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
19天前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
29 2
|
21天前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
18 3
|
21天前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
15 2