iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言基础文件操作方式超全详解建议收藏
  • 811
分享到

C语言基础文件操作方式超全详解建议收藏

2024-04-02 19:04:59 811人浏览 泡泡鱼
摘要

目录什么是文件文件名文件类型文件指针文件的打开与关闭打开方式文件的顺序读写关于fread的返回值对比一组函数文件随机读取文件结束判断perror()ferror()什么是文件 磁盘上

什么是文件

磁盘上的文件是文件。

在程序设计中,我们一般读的文件有两种:程序文件 和 数据文件

程序文件包括源程序文件(后缀为.c)、目标文件(win下后缀为 .obj)、可执行文件(win下环境后缀为.exe)

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

文件名

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

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

c:\code\test.txt

文件类型

文本文件:肉眼看得懂的东西

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

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换,以ASCII字符(对应ASCII的值)的形式存储的文件就是文本文件。

文件指针

文件类型指针(文件指针)

每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(如文件名字,文件状态,文件当前的位置)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名为FILE.

vs2019编译环境中提供的 stdio.h头文件中有以下的文件类型声明。


#ifndef _FILE_DEFINED
    #define _FILE_DEFINED
    typedef struct _iobuf
    {
        void* _Placeholder;
    } FILE;
#endif

不同C编译器的FILE类型包含内容大同小异。

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。

一般都是通过FILE的指针来维护这个FILE结构的变量。

FILE *pf;

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

总结:每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的相关信息,这个相关信息是个结构体,使用typedef类型重新定义,也就是FILE

文件的打开与关闭

在打开文件的同时,会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

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

相对路径写法(当前代码所在路径下)

… 表示上一级路径

. 表示当前路径


FILE* p = fopen("../test.txt","r");    //打开当前路径低下 的test文件

绝对路径写法(明确指出)


fopen("C:\\2012_code\\84\\test\\test1.txt ","r");

打开方式

文件使用方式 含义 如果指定文件不存在
“r”(只读) 为了输入数据,打开一个已存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新的文件(销毁原来的文件信息)
“a”(追加) 向文本文件尾添加数据 出错
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文件 建立一个新的文件(销毁原来的文件信息)
“ab”(追加) 向一个二进制文件添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建立一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件

如果文件打开失败,返回空指针NULL

在这里插入图片描述


FILE* pf = fopen("text.txt","r");
if(pf == NULL)
{
    printf("%s\n",strerror(errno));
    return 0;
}
fclose(pf);
pf = NULL;

关闭文件时是值传递,不会改变文件本身。

文件的顺序读写

结合MSDN食用更好

功能 函数名 适用于
字符输入函数 int fgetc( FILE * stream); 所有输入流
字符输出函数 int fputc(int c, FILE* stream); 所有输出流
文本行输入函数 char *fgets(char* string, int n, FILE* stream) 所有输入流
文本行输出函数 int fputs(const char* string, FILE* stream) 所有输出流
格式化输入函数 fscanf把文件假想成黑色的对话框。和普通的scanf相比,前面多了一个指向文件信息的指针。 所有输入流
格式化输出函数 fprintf 和普通的printf相比,前面多了一个指向文件信息的指针。(把数据放到文件里了) 所有输出流
二进制输入 fread : 返回类型是读了几个元素 文件
二进制输出 fwrite 文件

键盘stdin和屏幕stdout都是外部设备, stdin和stdout都是FILE类型的

键盘stdin和屏幕stdout都是外部设备, stdinstdout都是FILE类型的

键盘 - 标准输入设备; 屏幕 - 标准输出设备

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

关于fread的返回值


fread returns the number of full items actually read, 
which may be less than count if an error occurs or if the end of the file is encountered before reaching count.
Use the feof or ferror function to distinguish a read error from an end-of-file condition.
If size or count is 0,
fread returns 0 and the buffer contents are unchanged.

对比一组函数

scanfprintf:针对标准输入流、标准输出流的格式化输入、输出语句

fscanffprintf:针对所有输入流、所有输出流的格式化输入、输出语句

sscanfsprintf:

sscanf :从字符串中读取格式化的数据


Read fORMatted data from a string.

int sscanf( const char *buffer, const char *format [, argument ] ... );

sprintf:把格式化的数据存储到字符串中


Write formatted data to a string.

int sprintf( char *buffer, const char *format [, argument] ... );

用途:记录日志

但是文件不安全,不够高效 ------>>>> 数据库 Mysql ?

使用文件的格式:

打开文件 — 安全检查 ---- 操作 ---- 关闭文件

文件随机读取

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


fseek
Moves the file pointer to a specified location.
int fseek( FILE *stream, long offset, int origin );
offset: 偏移量(单位字节)   origin:文件指针当前位置

文件当前位置的三种形式:


SEEK_CUR
Current position of file pointer

SEEK_END
End of file

SEEK_SET
Beginning of file

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


ftell  
Gets the current position of a file pointer.
long ftell( FILE *stream );

应用


int main()
{
    FILE* pf = fopen("test.txt","r");
    if(pf == NULL)
    {
		printf("%s\n",strerror(errno));
    }
    //1.定位文件指针
    fseek(pf, 2, SEEK_CUR);
    //2.读取文件
    int ch = fgetc(pf);
    
    printf("%c",ch);
    
    fclose(pf);
    pf=NULL;
	return 0;
}

rewind:让文件指针回到起始位置


rewind  
Repositions the file pointer to the beginning of a file.
void rewind( FILE *stream );

文件结束判断

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

Return Value

The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.

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

1.文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets)

​ fgetc判断是否是EOFfgets判断返回值是否为NULL

2.二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。比如:通过fread判断返回值是否小于实际要读的个数。

perror()

函数直接先打印你放在括号里面的字符串,然后接着打印冒号和错误信息。

ferror()

Return Value

If no error has occurred on stream, ferror returns 0. Otherwise, it returns a nonzero value.

应用


int main()
{
	FILE* pf = fopen("test.txt","r");
    if(pf == NULL)
    {
        perror("open file test2.txt");
        return 0;
    }
    //读文件
    int ch = 0;
    while((ch = fgetc(pf)) != EOF)
    {
		putc(ch);
    }
    if(ferror(pf))
    {
		printf("error\n");
    }
    else if(feof(of))
    {
		printf("end of file");
    }
	return 0;
}

以上就是C语言文件操作方式超全详解建议收藏的详细内容,更多关于C语言文件操作方式的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言基础文件操作方式超全详解建议收藏

本文链接: https://www.lsjlt.com/news/154387.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C语言基础文件操作方式超全详解建议收藏
    目录什么是文件文件名文件类型文件指针文件的打开与关闭打开方式文件的顺序读写关于fread的返回值对比一组函数文件随机读取文件结束判断perror()ferror()什么是文件 磁盘上...
    99+
    2024-04-02
  • python超详细基础文件操作【建议收藏】
    文章目录 前言发现宝藏1 文件操作1.1 文件打开与关闭1.1.1 打开文件1.1.2 关闭文件 1.2 访问模式及说明 2 文件读写2.1 写数据(write)2.2 读数据(re...
    99+
    2024-01-21
    python
  • C语言 超详细模拟实现单链表的基本操作建议收藏
    目录1 链表的概念及结构2 链表的分类3 链表的实现无头+单向+非循环链表增删查改实现3.1 链表的定义3.2 链表数据的打印3.3 链表的尾插3.4 链表空间的动态申请3.5 链表...
    99+
    2024-04-02
  • C语言超详细文件操作基础下篇
    目录一、文件的顺序读写1.格式化的输出函数(fprintf)2.格式化的输入函数(fscanf)3.二进制读写1.二进制输出函数(fwrite)2.二进制输入函数3.scanf,fs...
    99+
    2024-04-02
  • C语言超详细文件操作基础上篇
    目录一、为什么使用文件二、什么是文件1.什么是数据文件2.什么是程序文件3.文件名三、文件的打开和关闭1 文件指针:2.打开和关闭文件函数(1)打开文件函数:(2)关闭文件函数四、文...
    99+
    2024-04-02
  • C语言超详细讲解文件的操作
    目录一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名三、文件指针四、文件的打开和关闭五、文件的顺序读写六、文件的随机读写fseekftellrewind七、文件结束...
    99+
    2024-04-02
  • C++中文件操作基础详解
    目录文件操作文件分类文本文件写文件读文件二进制文件写文件读文件文件操作 意义:利用文件操作可以保存我们程序运行的信息,是持久化技术的体现 文件分类 按文件类型分为: 1、文本文件 &...
    99+
    2024-04-02
  • C语言操作符基础知识图文详解
    目录1.算术操作符+ - * /%2.移位操作符>> (右移操作符) <<(左移操作符)左移操作符:<<右移操作符:>>3.位操作符3...
    99+
    2024-04-02
  • C语言操作符基础知识详解
    目录一.单目操作符:二.关系操作符三.条件操作符四.逗号表达式五.逻辑操作符总结一.单目操作符: !:逻辑反操作符; -:负数操作符; +:整数操作符; &:取地址操作符; ...
    99+
    2024-04-02
  • C语言文件操作详解
    目录一、什么是文件二、文件缓冲区三、文件指针四、文件的打开和关闭。总结一、什么是文件 在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。 程序文件: 包括源程序文件(后缀为....
    99+
    2024-04-02
  • C语言 超详细顺序表的模拟实现实例建议收藏
    目录概念及结构接口实现1 顺序表的动态存储2 顺序表初始化3 顺序表的销毁4 顺序表的尾插5 顺序表的尾删6 顺序表的头插7 顺序表的头删8 顺序表容量的检查与扩容9 顺序表任意位置...
    99+
    2024-04-02
  • C语言实现俄罗斯方块的六种模式详程建议收藏
    --------写在前面--------         第一次做标题党,大家轻喷哈。这个游戏是博主在...
    99+
    2024-04-02
  • C语言中的文件操作详解
    目录1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开和关闭4.文件的顺序读写5.文件的随机读写5.1fsee...
    99+
    2024-04-02
  • 详解C语言之文件操作(上)
    目录什么是文件程序文件数据文件文件名文件类型文件缓冲区文件指针 文件的打开和关闭输入和输出总结什么是文件 磁盘上的文件就是文件。 在程序设计中,我们一般谈的文件有两种:程序...
    99+
    2024-04-02
  • 详解C语言之文件操作下)
    目录文件的随机读写fseek函数ftell函数rewind函数文件结束判定feof函数和ferror函数总结文件的随机读写 之前的函数只能实现顺序读写,而实现随机读写需用fseek函...
    99+
    2024-04-02
  • C语言全面梳理文件操作方法
    目录1.什么是文件1.1程序文件1.2数据文件1.3文件名2.为什么使用文件3.文件的打开和关闭3.1文件指针3.2文件的打开和关闭4.文件的顺序读写什么是流5.文件的随机读写5.1...
    99+
    2024-04-02
  • C语言进阶之文件操作详解
    目录0. Intro1. 文件名2. 文件的打开和关闭2.1 文件指针2.2 打开和关闭文件3. 文件顺序读写3.1 利用以上函数实现拷贝文件操作3.2 二进制的读写3.3 格式化输...
    99+
    2024-04-02
  • C语言全面细致讲解文件操作
    目录什么是文件程序文件数据文件文件名文件指针文件的打开和关闭文件的顺序读写字符输入输出函数字符串输入输出函数(fgets,fputs)格式化输入输出函数(fscanf,fprintf...
    99+
    2024-04-02
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2024-04-02
  • C语言文件操作详解以及详细步骤
    目录一、为什么使用文件?二、什么是文件?1.程序文件2.数据文件3.文件名三、文件的打开和关闭1.文件指针2.文件的打开和关闭3.文件的顺序读写四、fseek函数五、ftell函数六...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作