【C语言】文件操作详解

一、为什么使用文件

前面我们使用通讯录记录联系人的时候,在程序结束后这些联系人都会被销毁,在下一次启动程序的时候,这些联系人又需要重新输入,为了防止这种情况,我们引入了文件操作,在程序结束后将通讯录中的内容保存在文件中,在下一次启动程序的时候在文件中读取内容,这样就能实现数据的持久化。


二、什么是文件

在程序设计中一般分为:程序文件数据文件

1. 程序文件

大致包括源程序文件(.c)、目标文件(.obj)、可执行程序(.exe)等。

2. 数据文件

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

三、文件的打开和关闭

1. 文件指针

FILE* pf;

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

2. 文件的打开和关闭

文件的打开
FILE * fopen ( const char * filename, const char * mode );

文件的关闭
int fclose ( FILE * stream );

3. 文件的打开方式

文件使用方式 ------------------------------含义------------------------------ 如果指定文件不存在
“r”(只读) 以只读方式打开一个文件 错误
“w”(只写) 以只写方式打开一个文件 建立一个新文件
“a”(追加) 打开一个文件追加 建立一个新文件
“rb”(只读) 以只读方式打开一个二进制文件 错误
“rw”(只写) 以只写方式打开一个二进制文件 建立一个新文件
“ra”(追加) 打开一个二进制文件追加 建立一个新文件
“r+”(只读) 以读写方式打开一个文件 错误
“w+”(只写) 以读写方式建立一个文件 建立一个新文件
“a+”(追加) 以读写方式打开一个文件追加 建立一个新文件
“rb”(只读) 以读写方式打开一个二进制文件 错误
“wb”(只写) 以读写方式建立一个二进制文件 建立一个新文件
“ab”(追加) 以读写方式打开一个二进制文件追加 错误

四、文件的顺序读写

1. scanf函数

int scanf ( const char * format, ... );

scanf()函数针对标准输入流(stdin)的格式化的输入函数

2. printf函数

int printf ( const char * format, ... );

printf()函数 针对标准输出流(stdout)的格式化的输出函数

3. fscanf函数

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

fscanf()函数针对所有输入流(文件流/stdin)的格式化输入函数

4. fprintf函数

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

fprintf()函数 针对所有输出流(文件流/stdout)的格式化输出函数

5. sscanf函数

int sscanf ( const char * s, const char * format, ...);

sscanf()函数把字符串转换成格式化的数据

6. sprintf函数

int sprintf ( char * str, const char * format, ... );

sprintf()函数把格式化的数据转换成字符串

五、文件的随机读写

1. fseek函数

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

fseek()函数用于在打开的文件中移动读/写位置指针的位置。它可以将指针设置到文件的任何位置,以便读取或写入文件的不同部分。具体来说,fseek()函数接受三个参数:文件指针、偏移量和起始点。通过指定这些参数,可以定位到文件中的任何位置。

常量 位置
SEEK_SET 文件开头
SEEK_CUR 文件指针的当前位置
SEEK_END 文件结尾

2. ftell函数

long int ftell ( FILE * stream );

ftell()函数用于返回当前文件指针相对于文件起始处的偏移量,即当前位置距离文件开头的字节数。

3. rewind函数

void rewind ( FILE * stream );

rewind()函数用于将文件指针重新定位到文件的开头。这意味着任何后续的读取或写入操作将从文件的开始处开始。

六、文件读取结束的判断

feof函数

注意
feof()函数是用来判断读取文件是否正常结束,而不是是否结束。
所以feof()函数应该在文件结束后使用,而不是在读取过程中使用。

  1. 文本文件读取是否结束,判断返回值是否为EOF( fgetc) 或者 NULL( fgets)
    例如:
    fgetc()函数判断是否为EOF .
    fgets()函数判断返回值是否为NULL.
  2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
    例如:
    fread()函数判断返回值是否小于实际要读的个数。

结尾

如果有什么建议和疑问,或是有什么错误,希望大家能够提一下。
希望大家以后也能和我一起进步!!
如果这篇文章对你有用的话,希望能给我一个小小的赞!

猜你喜欢

转载自blog.csdn.net/qq_55401402/article/details/130034580