文件的操作

本文介绍了内存与持久性存储的关系,详细解读了文件的概念,包括其分类、属性和操作。涵盖了文件的打开、关闭、读写方法,如fopen、fread、fwrite等,以及文件定位与大小查看。讨论了文本文件与二进制文件的区别,重点展示了在信息技术中如何高效地处理和管理文件。
摘要由CSDN通过智能技术生成

1.为什么要使用文件                                                                                                                        内存是易失性存储介质,很容易造成数据丢失,使用文件之后,数据就会被保存在硬盘(持久性存储介质)上,做到了数据的持久化。磁盘上最典型的存储单元就是文件。

2.什么是文件                                                                                                                                       文件:把信息写在磁盘上的一种保存数据的载体。                                                                             按文件的类别分(工程师视角):程序文件和数据文件 。                                                                 文件内容角度:文件包含文件内容和文件属性(大小、时间、类别等等),即文件=内容+属性,所以 创建一个空文件要占用磁盘空间。

文件名:文件路径+文件名主干+文件后缀。(例如:c:\class\text.txt)通过路径和文件名就能找到对应的文件。‘\ ’称为路径分隔符   

3.文件的打开与关闭                                                                                                                              FILE ,一个结构体类型,用来存放文件的的相关信息。                                                                    FILE*   , 文件类型指针,通俗讲,叫句柄   。通过文件指针,能够找到与之相关联的文件。           FILE * fopen ( const char * filename, const char * mode );                                                                 第一个参数表示要打开哪一个文件,可以带路径,也可以直接是文件名,默认为当前路径(例如:在VS2013中,源代码在哪个路径下,打开文件就在那个路径)。第二个参数表示打开文件的方式,读、写、等等。

打开的方式:

w只写,覆盖写,每次都从文件开头写(写入之前会清空文件内容),如果没有文件,则会自动创建。
r只读。
a(append)追加写,在文件末尾继续写。
wb以二进制的方式写
rb以二进制的方式读
ab向一个二进制文件尾添加数据 
w+以读写方式打开,如果没有文件,则会自动创建。
r+以读写方式打开。

  int fclose ( FILE * stream );                                                                                                                关闭文件,若关闭成功,返回一个非零的值,若关闭失败,返回零。

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

c可执行程序(几乎任何语言):默认运行的时候,都会打开三个设备(文件)                               键盘(标准输入:stdin)                                                                                                                     显示器(标准输出:stdout)                                                                                                               显示器(标准错误:stderr)

文件的顺序读写:(修改文件的内容)

 int fgetc ( FILE * stream );

从指定文件中读取字符

返回指定流的内部文件位置指示符当前指向的字符。然后,内部文件位置指示器前进到下一个字符。

成功时,返回读取的字符(提升为int值)。

返回类型为int,以适应特殊值EOF,表示故障:

如果调用时流位于文件末尾,则函数返回EOF并设置流的文件末尾指示符(feof)。

如果发生读取错误,函数将返回EOF并设置流的错误指示符(ferror)。

int fputc ( int character, FILE * stream );

将字符写入指定文件

将字符写入流并使位置指示器前进。

字符被写入流的内部位置指示器指示的位置,然后自动前进1。

成功时,将返回写入的字符。

如果发生写入错误,则返回EOF并设置错误指示符(ferror)。

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

将字符串写入文件

将str指向的C字符串写入流。

函数从指定的地址(str)开始复制,直到到达终止的空字符('\0')。此终止空字符不会复制到流中。

成功时,将返回一个非负值。

出错时,函数返回EOF并设置错误指示符(ferror)。

char * fgets ( char * str, int num, FILE * stream );

从流中获取字符串(从文件中读取字符串)

从流中读取字符并将其作为C字符串存储到str中,直到读取(num-1)个字符或到达换行符或文件结尾,以先发生的为准。

换行符使FGET停止读取,但函数认为它是有效字符,并包含在复制到str的字符串中。

在复制到str的字符之后,将自动追加终止的空字符。

如果读取成功,函数返回str,如果读取失败,将设置错误指示(ferror),并返回NULL指针,如果读到文件末尾,将eof指示符(feof),并返回NULL指针

int fprintf ( FILE * stream, const char * format, ... );将格式化数据写入流,按照特定的格式要求,用后续的参数的内容(...)替换字符串中的内容(const char * format),再把它写入指定的流(FILE * stream)中。如果没有经过格式化,它会将字符串内容(const char * format)全部作为字符依次写入。
int fscanf ( FILE * stream, const char * format, ... );

从流中读取格式化数据

从流中读取数据,并根据参数格式将其存储到附加参数所指向的位置。

附加参数应指向已分配的对象,该对象的类型由格式字符串中相应的格式说明符指定。

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

将数据块写入流

参数const void * ptr表示要写入的值,size_t size表示写入的基本单元,size_t count表示写入的个数,写入文件的总大小为size*count

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

从流中读取数据块

void * ptr表示要读到哪,size_t size表示要读的基本单元,size_t count表示期望读多少个

返回值为实际读到的个数。(实际读到的<期望读到的)

 文件的随机读写:(操作文件的属性

文件的随读写
long int ftell ( FILE * stream );

返回流的位置指示器的当前值。

对于二进制流,这是从文件开头开始的字节数。

对于文本流,数值可能没有意义,但仍可以用于稍后使用fseek将位置恢复到相同位置

int fseek ( FILE * stream, long int offset, int origin );重新定位流位置指示器,参数long int offset为偏移量,参数int origin用作偏移的参考位置。origin有三种情况:1.设置为SEEK_SET,即文件的开头;2.设置为SEEK_CUR,即文件指定的当前位置;3.设置为SEEK_END,即文件的末尾。
void rewind ( FILE * stream );将流的位置设置为开始位置

 查看文件大小   :

                  

 

 

  文本文件与二进制文件:

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值