最近这段时间因为学校的课程安排,老是碰到文件操作的问题,虽然早已经是学过了,可每次用起来还是觉得不够扎实啊,碰到某些郁闷的问题还是得翻书,感觉很是不爽,于是花时间把有关文件操作的知识点回顾一遍。因为C的文件流操作是基础,也是最先学的,所以在这就先对C的文件流梳理下吧。
我们知道,按数据结构的组织形式,文件分为文本文件和二进制文件,这两种文件的读写方式有一定的区别,用的时候也是需要特别注意的。因为大多数情况下,我们用到的也就是这两种类型的文件操作,所以在这里只讨论有关这两种文件的有关操作了。
文件操作步骤:
(1)打开文件
(2)读或写文件
(3)关闭文件
1.文件的打开与关闭
C中可以用FILE来定义文件变量或文件指针变量,分别用于保存文件信息或指向不同的文件信息区。定义形式:FILE *fp;
文件打开函数:
FILE *fp = fopen(char *fileName, char *type);
fileName:文件路径名
type:打开文件方式
常用打开文件方式:(够详细了吧)
类型 含义 文件不存在 文件存在
r 以只读方式打开文本文件 返回错误信息 打开文件
w 以只写方式打开文本文件 建立新文件 打开文件,原文件清空
a 以追加方式打开文本文件 建立新文件 从文件尾追加数据
r+ 以读/写方式打开文本文件 返回错误信息 打开文件
w+ 以读/写方式打开新文本文件 建立新文件 打开文件,原文件清空
a+ 以读/写方式打开文本文件 建立新文件 打开文件,读/写文件数据
rb 以只读方式打开二进制文件 返回错误信息 打开文件
wb 以只写方式打开二进制文件 建立新文件 打开文件,原文件清空
ab 以追加方式打开二进制文件 建立新文件 从文件尾追加数据
rb+ 以读/写方式打开二进制文件 返回错误信息 打开文件
wb+ 以读/写方式打开新二进制文件 建立新文件 打开文件,原文件清空
ab+ 以读/写方式打开二进制文件 建立新文件 打开文件,读/写文件数据
注意:
当文件打开时,文件指针一般是指向文件字节流的开始处,所以在选择以“a+”方式打开文件时一定要注意,若第一次对文件流进行读操作,第二次进行写操作前,必须将文件指针定位到文件尾,否则写入的数据会覆盖以前的数据;若第一次对文件流进行写操作,第二次进行读操作前,也必须将文件指针定位到要读取的开始位置。即若要改变上一次对文件的操作,则需要对文件指针重新定位。
文件关闭函数:
fclose(fp);
文件的顺序读写
2.1 字符读写函数
从文件中读一个字符:char ch = fgetc(fp);
向文件中写一个字符:fputc(ch, fp);
2.2 字符串读写函数
从文件中读取字符串:fgets(str, n, fp);
向文件中写入字符串:fputs(str, fp);
2.3 格式化读写函数
格式化读取字符串:fscanf(FILE *fp, char *str, &s1, &s2,...);
格式化写入字符串:fprintf(FILE *fp, char *str, s1, s2, ...);
文件的随机读写
即对文件中的指定位置的信息进行读写操作,所以在这里就需要对文件进行定位了。
3.1 文件定位函数
int fseek(FILE *fp, long m, int n);
这个函数是说明把指针移动到距n为m个字节处,其中m>0表示向文件尾移动,m<0表示向文件头移动。
3.2 位置函数
long int ftell(FILE *fp);
这个函数是取得指针所指向位置距离文件头的偏移量。
3.3 重定位函数
void rewind(FILE *fp);
这个函数是将文件指针重新指向文件的开始处。
3.4 随机读取函数
int fread(void *buf, int size, int count, FILE *fp);
3.5 随机写入函数
int fwrite(void *buf, int size, int count, FILE *fp);
文件操作错误检测
判断文件流是否错误:int ferror(FILE *fp);
判断是否到达文件尾:int feof(FILE *fp);
不知不觉都1点多了,还是先睡了吧。。。
有关重点的C++文件操作,待续。。。
分享到:
相关推荐
### C语言使用文件流操作文本文件 #### 一、引言 在C语言中,虽然没有像C#那样的`StreamReader`和`StreamWriter`这样的高级文本流类,但开发者可以通过使用C标准库中的`FILE`指针及相关函数实现对文本文件的操作。...
本文将通过一个具体的示例程序来详细解释`freopen`函数的使用方法及其应用场景,帮助读者更好地理解如何利用C语言进行文件操作。 #### 1. `freopen`函数简介 `freopen`函数是C标准库中的一个用于重新定向标准输入...
在C语言编程中,文件操作是极其重要的功能之一,它允许程序员对磁盘上的文件进行读写等操作。本文将详细介绍C语言中常用的文件操作函数,包括`clearerr`, `fclose`, `fdopen`, `feof`, `fflush`, `fgetc`, `fgets`, ...
- 文件打开函数`fopen()`用于建立文件流,例如`FILE* fp = fopen("filename", "mode");`,其中"mode"可以是"r"(只读)、"w"(只写,若文件已存在则清空)、"a"(追加,不会覆盖原有内容)等。 2. **文件操作流程*...
标签中提到"C 文件 合并",这表明我们讨论的是C语言的文件操作技术,主要集中在文件读写操作上。在实际编程中,我们可能还需要考虑异常处理,比如源文件不存在或磁盘空间不足等情况,这些都需要通过适当的错误处理...
1. **文件流与文件指针**:在C语言中,文件被看作是一系列字节的序列,通过文件流(fstream)进行读写。文件操作通常涉及一个名为`FILE`的结构体,它代表了一个打开的文件。我们通过文件指针(file pointer)来操作...
- `clearerr`:清除文件流的状态标志。 这些函数在处理更复杂的文件操作时非常有用。 #### 七、总结 本文介绍了C语言中文件的基本概念以及如何使用C语言的标准库进行文件的打开、读取和写入操作。通过具体的代码...
### C语言文件操作知识点详解 #### 一、文件的基本概念 在C语言中,文件被视为一组有序的数据集合,具有特定的文件名。根据文件的用途和性质,可以将其分为不同的类型: 1. **普通文件**:包括源文件、目标文件、...
这对于将C标准I/O库的文件流与低级的文件操作(如`open()`和`close()`)相结合非常有用。 以上函数在`<stdio.h>`头文件中定义,它们构成了C语言中基本的文件操作工具箱。在编写涉及文件操作的C程序时,理解这些函数...
作用:清除文件流的错误旗标,以便下一次文件操作能够正常进行。 2. fclose() 函数 函数说明:fclose()函数用来关闭先前fopen()打开的文件。 函数原型:int fclose(FILE *stream); 参数:stream 为文件指针。 ...
12. `tmpfile()`创建一个临时文件流,原型是`FILE *tmpfile(void)`。使用完毕后通常会自动删除。 13. `tmpnam()`生成一个唯一的临时文件名,原型是`char *tmpnam(char *s)`。返回的文件名可以在程序中安全地使用,...
- **文件流**:C语言中的文件操作基于“流”的概念,文件流可以被视为数据的输入/输出流。 - **文件指针**:用于指向文件在内存中的位置,是进行文件操作的核心数据结构。 - **文件模式**:打开文件时需指定文件...
### C语言中的文件流操作详解 #### 一、概述 在C语言中,文件操作是一项非常重要的功能。通过文件操作,程序能够与外部存储设备进行交互,实现数据的持久化存储和读取。本文将详细介绍两个核心文件操作函数:`...
为了实现这些功能,你需要对C语言的I/O流有深入理解,还需要了解如何与操作系统进行交互,如使用`system()`函数执行系统命令,或者通过`fork()`和`exec()`系统调用来创建子进程执行系统命令。在模拟文件系统时,可能...
C语言模拟实现Linux文件系统 1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”...
当你调用`clearerr(stream)`时,它会将指定文件流`stream`的错误状态清零,这意味着之后的文件操作将不会因为之前发生的错误而中断。通常,当文件操作遇到问题时,错误标志会被设置,`clearerr()`可以帮助重置这一...
- **文件流的概念**:在C语言中,文件被看作是字节流,我们通过`stdio.h`库中的函数来处理这些字节流。 - **文件打开模式**:有多种文件打开模式,如"r"(只读)、"w"(只写)、"a"(追加),“r+”(读写)、"w+...
在这个“C操作指令源代码.rar”压缩包中,我们有两个文件,一个是“www.pudn.com.txt”,可能是包含相关资料或示例的文本文件,另一个是“C操作指令源代码”,很可能是包含C语言文件操作函数的源代码文件。...
总结一下,Linux下C编程进行文件流读写主要涉及`fopen`、`fread`和`fwrite`这三个函数。`fopen`用于打开文件,`fread`用于从文件中读取数据,`fwrite`则用于向文件中写入数据。理解并熟练掌握这些函数的使用是进行...