📄 32.htm
字号:
文件位置指示器也增大, 读多少个字节,
文件位 <br>
置指示器相应也跳过多少个字节。读写完毕函数返回所读和所写的字段个数。
<br>
ftell()函数返回文件位置指示器的当前值,
这个值是指示器从文件头开始 <br>
算起的字节数, 返回的数为长整型数,
当返回-1时, 表明出现错误。 <br>
下面程序把一个浮点数组以二进制方式写入文件test_b.dat中。
<br>
例14: <br>
#include <stdio.h> <br>
main() <br>
{ <br>
float f[6]={3.2, -4.34, 25.04, 0.1, 50.56, 80.5}; <br>
/*定义浮点数组并初始化*/ <br>
int i; <br>
FILE *fp; <br>
fp=fopen("test_b.dat", "wb"); /*创建一个二进制文件只写*/
<br>
fwrite(f, sizeof(float), 6, fp);/*将6个浮点数写入文件中*/
<br>
fclose(fp);
/*关闭文件*/ <br>
} <br>
下面例子从test_b.dat文件中读100个整型数,
并把它们放到dat数组中。 <br>
例15: <br>
#include <stdio.h> <br>
main() <br>
{ <br>
FILE *fp; <br>
int dat[100]; <br>
fp=fopen("test_b.dat", "rb");/*打开一个二进制文件只读*/
<br>
if(fread(dat, sizeof(int), 100, fp)!=100) <br>
/*判断是否读了100个数*/ <br>
{ <br>
if(feof(fp)) <br>
printf("End of file"); /*不到100个数文件结束*/
<br>
else <br>
printf("Read error"); /*读数错误*/ <br>
fclose(fp);
/*关闭文件*/ <br>
} <br>
注意: <br>
当用标准文件函数对文件进行读写操作时,
首先将所读写的内容放进缓冲区, <br>
即写函数只对输出缓冲区进行操作,
读函数只对输入缓冲区进行操作。例如向一
<br>
个文件写入内容,
所写的内容将首先放在输出缓冲区中,
直到输出缓冲区存满或 <br>
使用fclose()函数关闭文件时,
缓冲区的内容才会写入文件中。若无fclose() <br>
函数,
则不会向文件中存入所写的内容或写入的文件内容不全。有一个对缓冲区
<br>
进行刷新的函数, 即fflush(), 其调用格式为: <br>
int fflush(FILE *stream); <br>
该函数将输出缓冲区的内容实际写入文件中,
而将输入缓冲区的内容清除掉。 </p>
<p> 4. feof()和rewind()函数 <br>
这两个函数的调用格式为: <br>
int feof(FILE *stream); <br>
int rewind(FILE *stream); <br>
feof()函数检测文件位置指示器是否到达了文件结尾,
若是则返回一个非0 <br>
值, 否则返回0。这个函数对二进制文件操作特别有用,
因为二进制文件中, 文 <br>
件结尾标志EOF也是一个合法的二进制数,
只简单的检查读入字符的值来判断文 <br>
件是否结束是不行的。如果那样的话,
可能会造成文件未结尾而被认为结尾, 所 <br>
以就必须有feof()函数。 <br>
下面的这条语句是常用的判断文件是否结束的方法。
<br>
while(!feof(fp)) <br>
fgetc(fp); <br>
while为循环语句,
将在下面介绍。 <br>
rewind()函数用于把文件位置指示器移到文件的起点处,
成功时返回0, 否 <br>
则, 返回非0值。 <br>
</p>
<p> 1.2.2 非标准文件函数 <br>
这类函数最早用于UNIX操作系统,
ANSI标准未定义, 但有时也经常用到,
<br>
DOS 3.0以上版本支持这些函数。它们的头文件为io.h。
<br>
一、文件的打开和关闭 <br>
1. open()函数 <br>
open()函数的作用是打开文件,
其调用格式为: <br>
int open(char *filename, int
access); <br>
该函数表示按access的要求打开名为filename的文件,
返回值为文件描述字, <br>
其中access有两部分内容: 基本模式和修饰符,
两者用" "("或")方式连接。
修 <br>
饰符可以有多个, 但基本模式只能有一个。access的规定如表3-2。
<br>
表3-2 access的规定 <br>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<br>
基本模式 含义
修饰符
含 义 <br>
────────────────────────────
<br>
O_RDONLY 只读 O_APPEND
文件指针指向末尾 <br>
O_WRONLY 只写 O_CREAT
文件不存在时创建文件, <br>
属性按基本模式属性 <br>
O_RDWR 读写
O_TRUNC 若文件存在, 将其长度 <br>
缩为0, 属性不变 <br>
O_BINARY 打开一个二进制文件 <br>
O_TEXT 打开一个文字文件 <br>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<br>
open()函数打开成功,
返回值就是文件描述字的值(非负值),
否则返回-1。 </p>
<p> 2. close()函数 <br>
close()函数的作用是关闭由open()函数打开的文件,
其调用格式为: <br>
int close(int handle); <br>
该函数关闭文件描述字handle相连的文件。
</p>
<p> 二、读写函数 <br>
1. read()函数 <br>
read()函数的调用格式为: <br>
int read(int handle, void *buf,
int count); <br>
read()函数从handle(文件描述字)相连的文件中,
读取count个字节放到buf <br>
所指的缓冲区中, 返回值为实际所读字节数,
返回-1表示出错。返回0 表示文件 <br>
结束。 </p>
<p> 2. write()函数 <br>
write()函数的调用格式为: <br>
int write(int handle, void *buf,
int count); <br>
write()函数把count个字节从buf指向的缓冲区写入与handle相连的文件中,
<br>
返回值为实际写入的字节数。 <br>
<br>
三、随机定位函数 <br>
1. lseek()函数 <br>
lseek()函数的调用格式为: <br>
int lseek(int handle, long
offset, int fromwhere); <br>
该函数对与handle相连的文件位置指针进行定位,
功能和用法与fseek() 函 <br>
数相同。 </p>
<p> 2. tell()函数 <br>
tell()函数的调用格式为: <br>
long tell(int handle); <br>
该函数返回与handle相连的文件现生位置指针,
功能和用法与ftell()相同。 <br>
</p>
</td>
</tr>
</table>
</center></div><div align="center"><center>
<table border="0" cellspacing="1" width="640">
<tr>
<td class="p9" height="60"> <script>document.write("<p><a href=\"http://view.gznet.com/cgi-bin/rl_views.cgi?UID=10013421\" target=sxrl>");
document.write("<img src=\"http://refer.gznet.com/cgi-bin/rl_refer2.cgi?UID=10013421&refer="+escape(top.document.referrer)+"\" width=1 height=1 border=0 alt=\" \">");
document.write("</a>");
</script></td>
</tr>
</table>
</center></div>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -