c语言基础学习10_关于文件操作的复习

=============================================================================
如果一个程序只调用fopen,而不调用fclose。会导致两个结果:

(1)一个程序同时可以打开的文件数量是有限的,如果超过系统限制,那么打开文件会失败。
(2)一个fopen会占用一些内存,多个就会对内存消耗很大。
所以记得fopen使用完文件后要及时的fclose。
而且使用fclose后,能把缓冲区里面的数据同步到磁盘里面去。
=============================================================================
二进制文件和文本文件的区别:

1、在windows系统中的文本模式下,文件是以"\r\n"代表换行的。
若以文本模式打开文件,并使用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n"。

2、在类似于Unix/Linux系统中的文本模式下,文件是以"\n"代表换行的。
所以在Linux系统中文本模式和二进制模式并无区别。

3、在windows系统下读写文本文件的时候,是不写b的;但读写二进制文件的时候一定要写b的。

4、Linux系统下,b是忽略的。
=============================================================================
不要直接操作fopen返回的文件指针,这个指针只是给c语言库函数的参数使用的。(因为该指针里面很复杂。)
如果程序员不听话,直接操作这个指针,可能会带来很多问题。(除非你特别特别熟悉这个指针。)
原因之一:因为FILE里面的成员在不同的系统是不一样的。
=============================================================================
文本文件的结尾标示是EOF,但二进制文件不是,所以可以用EOF判断文件文件是否结尾,但二进制文件就需要用feof这个函数了。
为什么呢?
答:因为所有文本文件都是ASCII值,而ASCII的值没有负的(即-1),而二进制文件里面就是普通的数,有正有负的数。
=============================================================================
注意:fprintf,fscanf,fgets,fputs函数都是针对文本文件的,是针对行的读写函数。
=============================================================================
假设这次读了100个字节。
fread(buf, 1, 100, p); //返回值是100 要求是:一个单位是1个字节,一次读100个单位,读的达到了100个单位,所以返回值是100。
fread(buf, 100, 1, p); //返回值是1 要求是:一个单位是100个字节,一次读1个单位,读的达到了1个单位,所以返回值是1。

假设这次读了10个字节。
fread(buf, 1, 100, p); //返回值是10 要求是:一个单位是1个字节,一次读100个单位,读的只达到了10个单位,所以返回值是10。
fread(buf, 100, 1, p); //返回值是1 要求是:一个单位是100个字节,一次读1个单位,读的没有达到1个单位,所以返回值是0。

以上这两种写法,是否第二种效率高呢?答:效率是一样的,唯一的不同点是返回值不同。即:返回值取决于读了几个单位。
=============================================================================
把一个结构变量写入文件的时候,结构变量成员的对齐方式所导致的内存浪费部分同样也会写入文件。
=============================================================================
c语言文件读写的库函数都是自动维护FILE里面的相关成员,包括文件读写当前位置。
例如:每次调用fgets,或者fread后,下次再调用该函数的时候,就会自动从已读取内容的后面开始。
-----------------------------------------------------------------------------
feof函数为什么能知道是否到了文件结尾了呢?
答:因为fread或者fgets这些函数如果读完了文件的所有内容,他们会设置FILE里面相关变量的值。
而feof函数只是判断FILE结构里面相关变量的值是否为文件已经结尾状态。
=============================================================================
fopen成功打开一个文件后,文件指针都是在( #define SEEK_SET 0 )这个位置。
=============================================================================
注意:
文件拷贝时,通常的时候操作系统会把buf设置为64K大小。
文件读写时,c语言库函数设置的buf大小为4K。
=============================================================================

原文地址:https://www.cnblogs.com/chenmingjun/p/8370853.html

时间: 2024-08-01 10:03:59

c语言基础学习10_关于文件操作的复习的相关文章

黑马程序员--Java基础学习笔记【文件操作、递归】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 文件操作 文件和目录路径名的抽象表示形式. 成员变量 StringpathSeparator= File.pathSeparator; // 路径分隔符 System.out.println(pathSeparator); // ; Stringseparator= File.separator;// 默认名称分隔符 System.out.println(separator); // \ 构造

C语言基础学习笔记

--C语言框架-- 数据  字节byte          字符   char         8  半字half word     短整型        short int    16    字word            整型   int(integer)   32               长整型   long int     32                 单精度   float        32   双字(double word) 双精度  double       64 

D03——C语言基础学习PYTHON

C语言基础学习PYTHON--基础学习D02 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 8 函数式编程 9 小结 10 小练习:ATM+购物车程序 1 函数的基本概念 a 函数定义 b 函数特性 c 定义函数 a 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. b 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 c:语法

D01-R语言基础学习

R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理大数据集 5.R的数据结构 (1)向量 (2)矩阵 (3)数组 (4)数据框 (5)列表 6.实例演练 7.小结 1 R的下载与安装 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. 学习它那就先下载它!话不多说

C语言基础学习5:字符串与指针

1.字符串的表示形式 (1)用字符数组存放一个字符串,然后输出该字符串. char string[] = "I am happy"; printf("%s",string); (2)用字符指针指向一个字符串. char *string = "I am happy"; printf("%s",string); 2.字符指针作函数参数 (1)用字符数组作参数 void CopyString(char from[], char to

C语言基础学习3:数组与指针

数组元素的指针就是数组元素的地址. 1.指向数组元素的指针 C语言规定数组名(不包括形参数组名,形参数组并不占据实际的内存单元)代表数组中的首元素(即序列为0的元素)的地址. int a[10]; int *p1,*p2; p1 = &a[0]; p2 = a; p1和p2指向同一个数组a[10]. 2.通过指针引用数组元素 按C语言的规定,如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素,而不是将p的值(地址)简单的加1. 如果p的初值为&a[0],则 (1)

C语言基础学习3:指针

1.地址和指针的概念 一个变量的地址成为该变量的“指针”. 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”,指针变量的值(即指针变量中存放的值)是地址(即指针). 指针是一个地址,而指针变量是存放地址的变量 2.变量的指针和指向变量的指针变量 2.1指针变量的定义 指针变量的定义:基类型 *指针变量名: int a; int *pointer; pointer = &a; 2.2指针变量的引用 指针变量中只能存放地址,不能将一个整数赋给一个指针变量. “&”和“*

C语言基础学习2:字符数组

在C语言的基本数据类型中没有没有字符串变量,一般以字符数组的形式给出. 1.字符串数组的初始化 char c[] = {'I', ' ', 'a', 'm', 'h', 'a', 'p', 'p', 'y'}; char c[] = "I am happy"; 区别:第一种方式字符串长度为10,内存中占10*sizeof(char)个字节,第二种方式是以字符串形式表示,有一个字符串结束字符'\0',内存中占11*sizeof(char)个字节. 2.字符数组的输入输出 %c,一个一个字

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear