文章目录
文件的打开
mode字符串对应的操作模式:
| 读写方式 | 文件类型 | 含义 | 读写方式 | 文件类型 | 含义 |
|---|---|---|---|---|---|
| “r” | 文本文件 | 打开文本,只读 | “rb+” | 二进制文件 | 打开二进制文件,读、覆盖写 |
| “w” | 文本文件 | 建立文本文件,只写 | “wb+” | 二进制文件 | 打开二进制文件,先写后读 |
| “a” | 文本文件 | 打开文本文件,追加 | “ab+” | 二进制文件 | 打开二进制文件,读,追加 |
| “rb” | 二进制文件 | 打开二进制文件,只读 | “rt” | 文本文件 | 打开文本文件,只读 |
| “wb” | 二进制文件 | 建立二进制文件,只写 | “wt” | 文本文件 | 建立文本文件,只写 |
| “ab” | 二进制文件 | 打开二进制文件,读、追加 | “at” | 文本文件 | 打开文本文件,追加 |
| “r+” | 文本文件 | 打开文本文件,读、覆盖写 | “rt+” | 文本文件 | 打开文本文件,读、覆盖写 |
| “w+” | 文本文件 | 打开文本文件,先写后读 | “wt+” | 文本文件 | 打开文本文件,先写后读 |
| “a+” | 文本文件 | 打开文本文件,读、追加 | “at+” | 文本文件 | 打开文本文件,读、追加 |
文件的一般打开方式
fopen()函数打开文件有可能失败。如用“r”模式打开不存在的文件,此时会返回一个空指针NULL。则程序无法继续输入/输出数据。故需要在打开文件时判断是否有错。
FILE *fp; if((fp=fopen(filename,mode))==NULL) {
printf("打开文件错误!\n"); exit(1);/*由exit函数终止程序运行。*/ }
文件的关闭
文件的读/写
字符输入/输出函数
字符输出函数fputc()
字符输入函数fgetc()
文件结束检测函数feof()
字符串输入/输出函数
字符串输入函数fgets()
字符串输出函数fputs()
| 文件号 | 文件指针 | 标准文件 |
|---|---|---|
| 0 | stdin | 标准输入设备(键盘) |
| 1 | stdout | 标准输出设备(显示器) |
| 2 | stderr | 标准错误设备(显示器) |
| 3 | stdaux | 标准辅助设备(辅助设备端口) |
| 4 | stdprn | 标准打印(打印机) |
文件的格式化输入/输出函数
格式化输入函数fscanf()
格式化输出函数fprintf()
文件的数据块输入/输出函数
数据块输入函数fread()
数据块输出函数fwrite()
fread()和fwrite()读/写的最小单位是字节,而fscanf()和fprintf()的读/写数据基本单位是以类型为单位的数据对象。so,fread()和fwrite()更适合处理二进制文件,而fscanf()和fprintf()则更适合处理的都是文本文件。
在读取二进制文件时不能用EOF作为文件标志,要用feof函数判断文件是否结束。因为-1可能是一个有效数据。
整数输入/输出函数
getw 函数(只适用于二进制文件)
putw 函数(适用于二进制文件)
文件的定位操作
ftell函数
fseek函数
| from的值 | from的宏名 | 表示文件的位置 |
|---|---|---|
| 0 | SEEK_SET | 文件头 |
| 1 | SEEK_CUR | 读/写当前位置 |
| 2 | SEEK_END | 文件尾 |
例如:
fseek(fp,50L,SEEK_SET);//将读写指针移动到离文件头50个字节处 fseek(fp,100L,1);//将读写指针移动到离当前位置100个字节处 fseek(fp,-20L,2);//将读写指针移动到离文件末尾处20个字节处。
rewind函数
重点
·用rewind()函数可以将文件指针移到文件头,函数执行成功则返回0值,否则返回非0值。
·用ftell()函数可以返回文件指针的当前位置;返回值为long,是相对于文件头头的字节数,出错时返回-1L.
·用fseek()函数可以移动文件指针到指定位置。如果一个二进制文件中存放的是若干个结构体数据,则可以使用fseek()和ftell()函数来确定文件的长度n(字节数)以及文件中包含的数据块个数k。
例如:
fseek(fp,0L,SEEK_END);//将指针移动到文件尾
n=ftell(fp);//取当前字节数赋值给n
k=n/sizeof(struct st);
·只要一个文件中的各个数据项具有相等的长度,则该文件即可以顺序存取,也可以随机存取。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202033.html原文链接:https://javaforall.net
