| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言 文件操作 -> 正文阅读 |
|
[C++知识库]C语言 文件操作 |
一、文本数据和二进制数据1、文本数据文本数据由字符串组成,存放了每个字符的 ASCII 码值,每个字符占一个字节,每个字节存放一个字符。 例如数字 123,如果用文本格式存放,数据内容是'1'、'2'、'3' 三个字符,占三个字节,如下表所示。 1、二进制数据二进制数据是字节序列,数字123的二进制表示是01111011,如果用二进制格式形式存储,字符、短整型、短整型、长整型都可以存储123,存储方式分别如下: 1)字符型一个字节 01111011 2)短整型2个字节 00000000?01111011 3)整型4个字节 00000000?00000000?00000000?01111011 4)长整型8个字节 00000000?00000000?00000000?00000000?00000000?00000000?00000000?01111011 3、文本文件和二进制文件按文本格式存放数据的文件称为文本文件或ASCII文件,文件可以用vi和记事本打开,看到的都是ASCII字符。 按二进制格式存放数据的文件称为二进制文件,如果用vi打开二进制文件,看到的是乱码,没有意义。 二、文件的打开和关闭C?语言对文件进行操作之前必须先“打开”文件,操作(读和写)完成后,再“关闭”文件。 1、文件指针操作文件的时候,C语言为文件分配一个信息区,该信息区包含文件描述信息、缓冲区位置、缓冲区大小、文件读写到的位置等基本信息,这些信息用一个结构体来存放(struct _IO_FILE),这个结构体有一个别名FILE(typedef struct _IO_FILE FILE),FILE结构体和对文件操作的库函数在 stdio.h 头文件中声明的。 打开文件的时候,fopen函数中会动态分配一个FILE结构体大小的内存空间,并把FILE结构体内存的地址作为函数的返回值,程序中用FILE结构体指针存放这个地址。 关闭文件的时候,fclose函数除了关闭文件,还会释放FILE结构体占用的内存空间。 FILE结构体指针习惯称为文件指针。 2、打开文件我们可以使用?C语言提供的库函数fopen来创建一个新的文件或者打开一个已存的文件,调用fopen函数成功后,返回一个文件指针(?FILE *),函数的原型如下: FILE?*fopen(?const?char?*?filename,?const?char?*?mode?); 参数filename?是字符串,表示需要打开的文件名,可以包含目录名,如果不包含路径就表示程序运行的当前目录。实际开发中,采用文件的全路径。 参数mode也是字符串,表示打开文件的方式(模式),打开方式可以是下列值中的一个。
英文单词:read简写r、write简写w、append简写a。 注意了,不同教材中对文件打开的方式有不同的说法。 有的说打开文本文件的方式要用"rt"、"wt"、"at"、"rt+"、"wt+"、"at+","t"是text的简写,"t"可以省略不写。 有的说打开二进制文件的方式要用"rb"、"wb"、"ab"、"rb+"、"wb+"、"ab+","b"是binary的简写。 准确的说,在Linux平台下,打开文本文件和二进制文件的方式没有区别。 在windows平台下,如果以“文本”方式打开文件,当读取文件的时候,系统会将所有的"\r\n"转换成"\n";当写入文件的时候,系统会将"\n"转换成"\r\n"写入,?如果以"二进制"方式打开文件,则读和写都不会进行这样的转换,真是罗嗦。 3、关闭文件fclose库函数用于关闭文件,函数的原型: int?fclose(FILE?*fp); fp为fopen函数返回的文件指针。 4、注意事项1)调用fopen打开文件的时候,一定要判断返回值,如果文件不存在、或没有权限、或磁盘空间满了,都有可能造成打开文件失败。 2)文件指针是调用fopen的时候,系统动态分配了内存空间,函数返回或程序退出之前,必须用fclose关闭文件指针,释放内存,否则后果严重。 3)如果文件指针是空指针或野指针,用fclose关闭它相当于操作空指针或野指针,后果严重。 三、文本文件的读写在实际开发中,文本文件以行的形式存放字符串,如C程序的源代码,一段文字等,所以一般是按行写入和读取数据。 1、向文件中写入数据C语言向文件中写入数据库函数有fputc、fputs、fprintf,在实际开发中,fputc和fputs没什么用,只介绍fprintf就可以了。fprintf函数的声明如下: int?fprintf(FILE?*fp,?const?char?*format,?...); fprintf函数的用法与printf相同,只是多了第一个参数文件指针,表示把数据输出到文件。 程序员不必关心fprintf函数的返回值。 这取决于文件的打开方式 因为文件打开的方式是"w",每次打开文件的时候都会清空原文件中的记录。 大家可以试一下把文件打开方式设置为"a",看看程序执行的效果。 ? 2、从文件中读取数据C语言从文件中读取数据的库函数有fgetc、fgets、fscanf,在实际开发中,fgetc和fscanf没什么用,只介绍fgets就可以了。fgets函数的原型如下: char?*fgets(char?*buf,?int?size,?FILE?*fp); fgets的功能是从文件中读取一行。 参数buf是一个字符串,用于保存从文件中读到的数据。 参数size是打算读取内容的长度。 参数fp是待读取文件的文件指针。 如果文件中将要读取的这一行的内容的长度小于size,fgets函数就读取一行,如果这一行的内容大于等于size,fgets函数就读取size-1字节的内容。 调用fgets函数如果成功的读取到内容,函数返回buf,如果读取错误或文件已结束,返回空,即0。如果fgets返回空,可以认为是文件结束而不是发生了错误,因为发生错误的情况极少出现。 需要重点说明的是,在读取到 size-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。 不管 size 的值多大,fgets函只读取一行数据,不能跨行。 在实际开发中,可以将 size 的值设置地足够大,确保每次都能读取到一行完整的数据。 ? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:51:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |