我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言文件的操作方法有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言文件的操作方法有哪些

这篇文章主要讲解了“C语言文件的操作方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言文件的操作方法有哪些”吧!

文件的顺序读写

字符输入输出fgetc和fputc

fgetc:字符输入函数,也就是读文件时用的函数。

函数功能:Read a character from a stream

从一个文件中读一个字符到内存中。

函数原型:

int fgetc( FILE *stream );

参数为stream,也就是文件指针。

返回值:fgetc return the character read as an int or return EOF to indicate an error or end of file.该函数调用成功会返回读取到的的字符的ASCIIC码值;若读取文件时发生错误,或是已经读取到文件末尾,则返回EOF。

举例:将data.txt文件中的内容读取,并打印。

#include <stdio.h>#include <string.h>#include <errno.h>int main(){//打开文件FILE* pf = fopen("data.txt", "r");if (pf == NULL){printf("%s\n", strerror(errno));return 0;//文件打开失败,失败返回}//对文件进行输入字符操作int ch = 0;while ((ch = fgetc(pf))!= EOF){printf("%c", ch);}//关闭文件fclose(pf);pf = NULL;return 0;}

fputc:

函数功能:从内存中写一个字符到文件中。也就是输出字符。

函数原型:

int fputc( int c, FILE *stream );

第一个参数为待输出的字符,第二个参数是文件指针。

返回值:Each of these functions returns the character written. For fputc , a return value of EOF indicates an error.

如果正常运行则返回此字符,如果返回EOF则意味着失败。

举例:将字母a~z写入到data.txt文件中

#include <stdio.h>#include <string.h>#include <errno.h>int main(){//打开文件FILE* pf = fopen("data.txt", "w");//文件打开失败,失败返回if (pf == NULL){printf("%s\n", strerror(errno));return 0;}//对文件进行输出字符的操作char i = 0;for (i = 'a'; i <= 'z'; i++){fputc(i, pf);}//关闭文件fclose(pf);pf = NULL;return 0;}

文本行输入输出函数fgets和fputs

fgets和fputs是对文本行的操作,相当于对字符串的操作。这是不同于fgetc和fputc的地方。

fgets:

函数功能:

从文件中读一行字符到内存中,也就是输入。

函数原型:

char *fgets( char *string, int n, FILE *stream );

第一个参数是指向文件字符串的指针,第二个参数是读几个字符的意思,第三个参数是指向文件的指针。

返回值:Each of these functions returns string. NULL is returned to indicate an error or an end-of-file condition. Use feof or ferror to determine whether an error occurred.每一个这样的函数结束后正常情况返回一个指向这个字符串的字符指针。如果返回NULL则意味着遇到错误,或者是文件结束。但是重点来了~,想要判断到底是错误导致的返回,还是文件结束导致的返回,还需要使用feof函数和ferror函数来判断。

下面有涉及feof函数的用法

举个例子。

   //feof是用来在结束后判断是什么原因结束的    if (ferror(fp))        puts("I/O error when reading");    else if (feof(fp))        puts("End of file reached successfully");    fclose(fp);}

注意:

在fgets函数读取到指定字符数之前,若读取到换行符(&rsquo;\n&rsquo;),则停止读取,读取带回的字符包含换行符。

fgets函数读取到第n-1个字符时都没有遇到换行符(&rsquo;\n&rsquo;)时,则返回读到的前n-1个字符,并在末尾加上一个NULL字符返回。这样加起来共n个字符

fputs函数:

函数功能:

写一行字符串到文件中,也就是输出。

函数原型:

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

第一个参数为指向内存中这个字符串的指针,第二个参数为指向这个文件的文件指针。返回值:该函数调用成功会返回一个非负值;若输出时发生错误,则返回EOF。

格式化输入输出函数fscanf和fprintf

fscanf和fprintf也叫格式化输入(读)和输出(写)函数。

fscanf:

函数功能:

按照一定的格式如%s,%c,从指定文件的位置输入到内存中。

函数原型:

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

fscanf函数的第一个参数是读取数据的位置也就是文件指针,第二个参数也就是scanf函数的参数,也就是取地址。

除了第一个参数是需要指针位置其余和scanf函数操作一样。

fprintf:

函数功能:

将内存中的数据以一定的格式输出到文件中。也就是打印,也称为写。

函数原型:

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

第一个参数是文件指针,第二个参数和printf函数一样,会用printf函数就会用这个函数。

举例:

include <stdio.h>#include <string.h>#include <errno.h>struct S{char name[20];char sex[5];int age;};int main(){//打开文件FILE* pf = fopen("data.txt", "r");//如果文件打开失败,失败返回if (pf == NULL){printf("%s\n", strerror(errno));return 0;}//对文件进行格式化输入输出操作struct S tmp = { 0 };fscanf(pf, "%s %s %d", tmp.name, tmp.sex, &(tmp.age));printf("%s %s %d\n", tmp.name, tmp.sex, tmp.age);//可以打印出来,我这里没打印。//关闭文件fclose(pf);pf = NULL;return 0;}

二进制输入输出函数fread和fwrite

函数功能:Reads data from a stream.从一个流中读取数据到内存中。

函数原型:

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

第一个参数是buffer是内存的意思,第二个参数是要读的数据的类型,第三个参数是读取的个数,第四个参数是文件指针。总的意思是从文件指针指向的文件读取count个size大小的数据到内存buffer中。

返回值:若在读取过程中发生错误或是在未读取到指定元素个数时读取到文件末尾,则返回一个小于count的数。

fwrite:

函数功能:Writes data to a stream.写入二进制数据到文件中

函数原型:

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

第一个参数是输出数据的位置,第二个参数是要输出数据的元素个数,第三个参数是每个元素的大小,第四个参数是数据输出的目标位置。返回值:该函数调用完后,会返回实际写入目标位置的元素个数,当输出时发生错误或是待输出数据元素个数小于要求输出的元素个数时,会返回一个小于count的数。

举例:以wb输出到文件

#include <stdio.h>#include <string.h>#include <errno.h>int main(){//打开文件FILE* pf = fopen("data.txt", "wb");if (pf == NULL){printf("%s\n", strerror(errno));return 0;}//对文件以二进制形式进行输出操作int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };fwrite(arr, sizeof(int), 10, pf);//关闭文件fclose(pf);pf = NULL;return 0;}

文件的随机读写

fseek

函数介绍:

定位文件指针,以文件指针当前的位置,偏移到想定位的位置。向前偏移是负的,比如-1,-2,向后偏移是正的。

  • SEEK_CUR:从当前指针的位置偏移

  • SEEK_SET:从文件的起始位置开始偏移

  • SEEK_END:从文件的末尾开始偏移

函数原型:

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

第一个参数是文件指针,第二个参数是要偏移的偏移量。第三个参数是从什么位置开始偏移。举例。

#include <stdio.h>int main (){  FILE * pFile;  //打开文件  pFile = fopen ( "example.txt" , "wb" );  //以一行的形式写文件  fputs ( "This is an apple." , pFile );  //让文件指针从文件的起始位置开始偏移9个单位。  fseek ( pFile , 9 , SEEK_SET );  //继续写文件  fputs ( " sam" , pFile );  //关闭文件  fclose ( pFile );  return 0;   }

ftell

函数介绍:

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

函数原型:

long ftell( FILE *stream );

返回值类型为long int,第一个参数是文件指针。

fwind

函数介绍

让文件指针回到文件的起始位置。fseek函数也可以达到同样的效果。

函数原型:

void rewind( FILE *stream );

举例

#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';  puts (buffer);    return 0;   }

文本文件和二进制文件

数据文件:可以分为文本文件和二进制文件

二进制文件:文本文件可以肉眼看懂,二进制文件则是乱码看不懂。

数据在内存中是以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件文本文件:如果要求在外存中以ASCII码的形式存储,则需要在存储前转换。如果以ASCII字符的形式存储文件就叫做文本文件。

具体例子如下。

一个数据在内存中是怎么存储的呢?

如果整数10000以ASCII码的形式输出到磁盘,则占用5个字节。如果以二进制形式输出到磁盘则占用4个字节。

C语言文件的操作方法有哪些

文件结束的判定

feof

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

函数功能:

应用于当文件读取结束的时候,用ferror判断是读取失败结束,还是遇到文件末尾结束。

文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者是否为NULL(fgets)等。每个函数有每个特定的结束标志。

二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。

正确使用例子

#include <stdio.h>#include <stdlib.h>int main(void) {    int c;     // 注意:int,非char,要求处理EOF    FILE* fp = fopen("test.txt", "r");    //如果为0,则打开失败    if(!fp)    {        perror("File opening failed");        return EXIT_FAILURE;   } //fgetc 当读取失败的时候或者遇到文件结束的时候,都会返回EOF    while ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环   {        putchar(c);   }   //feof是用来在结束后判断是什么原因结束的    if (ferror(fp))        puts("I/O error when reading");    else if (feof(fp))        puts("End of file reached successfully");    fclose(fp);}

文件缓冲区

在ANSIC标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动的在在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

C语言文件的操作方法有哪些

举例:C语言代码也就是用户程序,要在屏幕上打印信息。则需要调用printf函数,而printf函数则调用了系统的API,让操作系统在屏幕上打印信息。但操作系统要为好多程序服务。所以在操作系统解决前,先放到文件缓冲区,程序攒满了再交给操作系统解决。

感谢各位的阅读,以上就是“C语言文件的操作方法有哪些”的内容了,经过本文的学习后,相信大家对C语言文件的操作方法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言文件的操作方法有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言文件的操作方法有哪些

这篇文章主要讲解了“C语言文件的操作方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言文件的操作方法有哪些”吧!文件的顺序读写字符输入输出fgetc和fputcfgetc:字符输
2023-06-29

C语言中文件操作方法有哪些

这篇文章主要介绍了C语言中文件操作方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是文件程序文件其实从文件的功能的角度来说:我们的文件可以分为两种类型的文件:程序
2023-06-25

c语言文件读写的操作方法有哪些

本篇内容介绍了“c语言文件读写的操作方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!c语言的文件读写操作:1、用fgetc()和fp
2023-07-04

C语言数组的操作方法有哪些

本篇内容主要讲解“C语言数组的操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言数组的操作方法有哪些”吧!一、一维数组1.创建//如何创建数组int num[10];char a
2023-06-30

Go语言zip文件的读写操作方法有哪些

这篇文章主要介绍“Go语言zip文件的读写操作方法有哪些”,在日常操作中,相信很多人在Go语言zip文件的读写操作方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言zip文件的读写操作方法有哪些
2023-07-05

c语言加密文件的方法有哪些

在C语言中,可以使用以下几种方法来加密文件:1. 替换字符:将文件中的每个字符替换为另一个字符,可以是按照一定的规则进行替换,也可以是根据一个密钥进行替换。2. 位移加密:将文件中的每个字符向右或向左进行位移,位移的大小可以是固定的,也可以
2023-08-31

Go语言中JSON文件的读写操作方法有哪些

这篇文章主要介绍“Go语言中JSON文件的读写操作方法有哪些”,在日常操作中,相信很多人在Go语言中JSON文件的读写操作方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中JSON文件的读写操
2023-07-05

Go语言中XML文件的读写操作方法有哪些

这篇文章主要介绍“Go语言中XML文件的读写操作方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言中XML文件的读写操作方法有哪些”文章能帮助大家解决问题。XML(extensible
2023-07-05

C语言中的字符串操作方法有哪些

本文小编为大家详细介绍“C语言中的字符串操作方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中的字符串操作方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。字符串在C语言里使用非常多,因为很
2023-06-29

C语言有哪些操作符

这篇文章将为大家详细讲解有关C语言有哪些操作符,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.单目操作符之前有了解到的三目操作符(?:),指的是有三个操作数例如:3+5其中,+是一个操作符3是左操作数5
2023-06-29

VB.NET文件操作语法有哪些

这篇文章主要介绍VB.NET文件操作语法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.拷贝文件(FileCopy语句)格式:FileCopy(源文件名),(目标文件名)功能:可以把源文件拷贝到目标文件,拷贝
2023-06-17

Go语言二进制文件的读写操作方法有哪些

本篇内容介绍了“Go语言二进制文件的读写操作方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言的二进制(gob)格式是一个自描
2023-07-05

C语言链表的操作有哪些

这篇“C语言链表的操作有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言链表的操作有哪些”文章吧。前言编译工具:vs
2023-06-30

java文件操作的方法有哪些

这篇文章主要讲解了“java文件操作的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java文件操作的方法有哪些”吧!文件的建立/检查与删除<%@ page="" contentt
2023-06-03

Scala文件操作方法有哪些

本篇内容介绍了“Scala文件操作方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 读取数据在Scala语言的 Source单
2023-07-05

Python操作Excel文件的方法有哪些

本篇内容介绍了“Python操作Excel文件的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据处理是 Python 的一大应用
2023-06-16

Python中的文件操作方法有哪些

这篇文章主要介绍“Python中的文件操作方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中的文件操作方法有哪些”文章能帮助大家解决问题。一、文件的编码计算机中有许多可用编码:U
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录