﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-悲惨的狼的门户-文章分类-C语言第十章</title><link>http://www.cnitblog.com/zhangjiang838/category/5275.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 05:53:26 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 05:53:26 GMT</pubDate><ttl>60</ttl><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26541.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:57:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26541.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26541.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26541.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26541.html</trackback:ping><description><![CDATA[<font color=#cc0000><strong>文件<br><br></strong></font><font color=#ff0000>文件的基本概念</font><br>　　所谓&#8220;文件&#8221;是指一组相关数据的有序集合。 这个数据集有一个名称，叫做文件名。 实际上在前面的各章中我们已经多次使用了文件，例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的， 在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看，文件可分为普通文件和设备文件两种。<br><br>　　普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集，可以是源文件、目标文件、可执行程序； 也可以是一组待输入处理的原始数据，或者是一组输出的结果。对于源文件、目标文件、 可执行程序可以称作程序文件，对输入输出数据可称作数据文件。<br><br>　　设备文件是指与主机相联的各种外部设备，如显示器、打印机、键盘等。在<a class=channel_keylink href="http://www.bc-cn.net/Article/czxt/Index.html">操作系统</a>中，把外部设备也看作是一个文件来进行管理，把它们的输入、输出等同于对磁盘文件的读和写。 通常把显示器定义为标准输出文件， 一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>就是这类输出。键盘通常被指定标准的输入文件， 从键盘上输入就意味着从标准输入文件上输入数据。scanf,getchar<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>就属于这类输入。 <br><br>　　从文件编码的方式来看，文件可分为ASCII码文件和二进制码文件两种。<br><br>　　ASCII文件也称为文本文件，这种文件在磁盘中存放时每个字符对应一个字节，用于存放对应的ASCII码。例如，数5678的存储形式为：<br>ASC码： 　00110101 00110110 00110111 00111000<br>　　　　　&#8595; 　　　　&#8595;　　　　&#8595; 　　　&#8595;<br>十进制码： 5　　　　　6　　　　7　　　　8 共占用4个字节。ASCII码文件可在屏幕上按字符显示， 例如源程序文件就是ASCII文件，用DOS命令TYPE可显示文件的内容。 由于是按字符显示，因此能读懂文件内容。<br><br>　　二进制文件是按二进制的编码方式来存放文件的。 例如， 数5678的存储形式为： 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示， 但其内容无法读懂。C系统在处理这些文件时，并不区分类型，都看成是字符流，按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作&#8220;流式文件&#8221;。<br><br>　　本章讨论流式文件的打开、关闭、读、写、 定位等各种操作。文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>在Ｃ语言中用一个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量指向一个文件， 这个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>称为文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。通过文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>就可对它所指的文件进行各种操作。 定义说明文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>的一般形式为： FILE* <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量标识符； 其中FILE应为大写，它实际上是由系统定义的一个结构， 该结构中含有文件名、文件状态和文件当前位置等信息。 在编写源程序时不必关心FILE结构的细节。例如：FILE *fp； 表示fp是指向FILE结构的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量，通过fp 即可找存放某个文件信息的结构变量，然后按结构变量提供的信息找到该文件， 实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。文件的打开与关闭文件在进行读写操作之前要先打开，使用完毕要关闭。 所谓打开文件，实际上是建立文件的各种有关信息， 并使文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>指向该文件，以便进行其它操作。关闭文件则断开<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>与文件之间的联系，也就禁止再对该文件进行操作。<br><br>　　在Ｃ语言中，文件操作都是由库<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>来完成的。 在本章内将介绍主要的文件操作<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:57 <a href="http://www.cnitblog.com/zhangjiang838/articles/26541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26539.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:56:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26539.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26539.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26539.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26539.html</trackback:ping><description><![CDATA[<font color=#ff0000>fclose</font><a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a><br><br>调用的一般形式是： fclose(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； 例如：<br>fclose(fp); 正常完成关闭文件操作时，fclose<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>返回值为0。如返回非零值则表示有错误发生。文件的读写对文件的读和写是最常用的文件操作。 <br><br>在Ｃ语言中提供了多种文件读写的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>： <br>&#183;字符读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a> ：fgetc和fputc<br>&#183;字符串读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>：fgets和fputs<br>&#183;数据块读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>：freed和fwrite<br>&#183;格式化读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>：fscanf和fprinf<br><br>　　下面分别予以介绍。使用以上<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>都要求包含头文件stdio.h。字符读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>ｆｇｅｔｃ和ｆｐｕｔｃ字符读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>是以字符(字节)为单位的读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。 每次可从文件读出或向文件写入一个字符。<br><br><font color=#ff0000>一、读字符<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>fgetc</font><br><br>　　fgetc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的功能是从指定的文件中读一个字符，<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用的形式为： 字符变量=fgetc(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； 例如：ch=fgetc(fp);其意义是从打开的文件fp中读取一个字符并送入ch中。<br><br>　　对于fgetc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的使用有以下几点说明：<br>1. 在fgetc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用中，读取的文件必须是以读或读写方式打开的。<br><br>2. 读取字符的结果也可以不向字符变量赋值，例如：fgetc(fp);但是读出的字符不能保存。<br><br>3. 在文件内部有一个位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。用来指向文件的当前读写字节。在文件打开时，该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>总是指向文件的第一个字节。使用fgetc <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>后， 该位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>将向后移动一个字节。 因此可连续多次使用fgetc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>，读取多个字符。 应注意文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>和文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>不是一回事。文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>是指向整个文件的，须在程序中定义说明，只要不重新赋值，文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>的值是不变的。文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>用以指示文件内部的当前读写位置，每读写一次，该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>均向后移动，它不需在程序中定义说明，而是由系统自动设置的。<br><br><font color=#ff00ff><strong>[例10.1]</strong></font>读入文件e10-1.c，在屏幕上输出。<br><font color=#009900>#include&lt;stdio.h&gt;<br>main()<br>{<br>FILE *fp;<br>char ch;<br>if((fp=fopen("e10_1.c","rt"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>ch=fgetc(fp);<br>while (ch!=EOF)<br>{<br>putchar(ch);<br>ch=fgetc(fp);<br>}<br>fclose(fp);<br>}</font><br>　　本例程序的功能是从文件中逐个读取字符，在屏幕上显示。 程序定义了文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>fp,以读文本文件方式打开文件&#8220;e10_1.c&#8221;， 并使fp指向该文件。如打开文件出错， 给出提示并退出程序。程序第12行先读出一个字符，然后进入循环， 只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上，再读入下一字符。每读一次，文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>向后移动一个字符，文件结束时，该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>指向EOF。执行本程序将显示整个文件。<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:56 <a href="http://www.cnitblog.com/zhangjiang838/articles/26539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26540.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:56:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26540.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26540.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26540.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26540.html</trackback:ping><description><![CDATA[<font color=#ff0000>文件打开</font><a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a><font color=#ff0000>ｆｏｐｅｎ<br><br></font>　　fopen<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用来打开一个文件，其调用的一般形式为： 文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>名=fopen(文件名，使用文件方式) 其中，&#8220;文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>名&#8221;必须是被说明为FILE 类型的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量，&#8220;文件名&#8221;是被打开文件的文件名。 &#8220;使用文件方式&#8221;是指文件的类型和操作要求。&#8220;文件名&#8221;是字符串常量或字符串数组。例如： <br><font color=#009900>FILE *fp；<br>fp=("file a","r");</font><br>其意义是在当前目录下打开文件file a， 只允许进行&#8220;读&#8221;操作，并使fp指向该文件。<br>又如：<br><font color=#009900>FILE *fphzk<br>fphzk=("c:\\hzk16',"rb")</font><br>其意义是打开C驱动器磁盘的根目录下的文件hzk16， 这是一个二进制文件，只允许按二进制方式进行读操作。两个反斜线&#8220;\\ &#8221;中的第一个表示转义字符，第二个表示根目录。使用文件的方式共有12种，下面给出了它们的符号和意义。 <br>文件使用方式 　　　　　　　意 义<br><font color=#009900>&#8220;rt&#8221;　　　　　　只读打开一个文本文件，只允许读数据 <br>&#8220;wt&#8221;　　　　　　只写打开或建立一个文本文件，只允许写数据<br>&#8220;at&#8221;　　　　　　追加打开一个文本文件，并在文件末尾写数据<br>&#8220;rb&#8221;　　　　　　只读打开一个二进制文件，只允许读数据<br>&#8220;wb&#8221;　　　　 　 只写打开或建立一个二进制文件，只允许写数据<br>&#8220;ab&#8221; 　　　　 　追加打开一个二进制文件，并在文件末尾写数据<br>&#8220;rt+&#8221;　　　　　 读写打开一个文本文件，允许读和写<br>&#8220;wt+&#8221;　　　　　 读写打开或建立一个文本文件，允许读写<br>&#8220;at+&#8221;　　　　　 读写打开一个文本文件，允许读，或在文件末追加数 据<br>&#8220;rb+&#8221;　　　　　 读写打开一个二进制文件，允许读和写 <br>&#8220;wb+&#8221;　　　　　 读写打开或建立一个二进制文件，允许读和写<br>&#8220;ab+&#8221; 　　　　　读写打开一个二进制文件，允许读，或在文件末追加数据<br></font><br>对于文件使用方式有以下几点说明：<br>1. 文件使用方式由r,w,a,t,b，+六个字符拼成，各字符的含义是：<br>r(read): 读<br>w(write): 写<br>a(append): 追加<br>t(text): 文本文件，可省略不写<br>b(banary): 二进制文件<br>+: 读和写<br><br>2. 凡用&#8220;r&#8221;打开一个文件时，该文件必须已经存在， 且只能从该文件读出。<br><br>3. 用&#8220;w&#8221;打开的文件只能向该文件写入。 若打开的文件不存在，则以指定的文件名建立该文件，若打开的文件已经存在，则将该文件删去，重建一个新文件。<br><br>4. 若要向一个已存在的文件追加新的信息，只能用&#8220;a &#8221;方式打开文件。但此时该文件必须是存在的，否则将会出错。<br><br>5. 在打开一个文件时，如果出错，fopen将返回一个空<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作，并作相应的处理。因此常用以下程序段打开文件：<br><font color=#009900>if((fp=fopen("c:\\hzk16","rb")==NULL)<br>{<br>printf("\nerror on open c:\\hzk16 file!");<br>getch();<br>exit(1);<br>}<br></font>　　这段程序的意义是，如果返回的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>为空，表示不能打开C盘根目录下的hzk16文件，则给出提示信息&#8220;error on open c:\ hzk16file!&#8221;，下一行getch()的功能是从键盘输入一个字符，但不在屏幕上显示。在这里，该行的作用是等待， 只有当用户从键盘敲任一键时，程序才继续执行， 因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。<br><br>6. 把一个文本文件读入内存时，要将ASCII码转换成二进制码， 而把文件以文本方式写入磁盘时，也要把二进制码转换成ASCII码，因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。<br><br>7. 标准输入文件(键盘)，标准输出文件(显示器 )，标准出错输出(出错信息)是由系统打开的，可直接使用。文件关闭<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>ｆｃｌｏｓｅ文件一旦使用完毕，应用关闭文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>把文件关闭， 以避免文件的数据丢失等错误。<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:56 <a href="http://www.cnitblog.com/zhangjiang838/articles/26540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26538.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:55:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26538.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26538.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26538.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26538.html</trackback:ping><description><![CDATA[<font color=#ff0000>二、写字符</font><a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a><font color=#ff0000>fputc<br><br></font>　　fputc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的功能是把一个字符写入指定的文件中，<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用的 形式为： fputc(字符量，文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； 其中，待写入的字符量可以是字符常量或变量，例如：fputc('a',fp);其意义是把字符a写入fp所指向的文件中。<br><br>　　对于fputc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的使用也要说明几点：<br>1. 被写入的文件可以用、写、读写，追加方式打开，用写或读写方式打开一个已存在的文件时将清除原有的文件内容，写入字符从文件首开始。如需保留原有文件内容，希望写入的字符以文件末开始存放，必须以追加方式打开文件。被写入的文件若不存在，则创建该文件。<br><br>2. 每写入一个字符，文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>向后移动一个字节。<br><br>3. fputc<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>有一个返回值，如写入成功则返回写入的字符， 否则返回一个EOF。可用此来判断写入是否成功。<br><br><font color=#ff00ff><strong>[例10.2]</strong></font>从键盘输入一行字符，写入一个文件， 再把该文件内容读出显示在屏幕上。<br><font color=#009900>#include&lt;stdio.h&gt;<br>main()<br>{<br>FILE *fp;<br>char ch;<br>if((fp=fopen("string","wt+"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>printf("input a string:\n");<br>ch=getchar();<br>while (ch!='\n')<br>{<br>fputc(ch,fp);<br>ch=getchar();<br>}<br>rewind(fp);<br>ch=fgetc(fp);<br>while(ch!=EOF)<br>{<br>putchar(ch);<br>ch=fgetc(fp);<br>}<br>printf("\n");<br>fclose(fp);<br>}</font><br>　　程序中第6行以读写文本文件方式打开文件string。程序第13行从键盘读入一个字符后进入循环，当读入字符不为回车符时， 则把该字符写入文件之中，然后继续从键盘读入下一字符。 每输入一个字符，文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>向后移动一个字节。写入完毕， 该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>已指向文件末。如要把文件从头读出，须把<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移向文件头， 程序第19行rewind<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用于把fp所指文件的内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移到文件头。 第20至25行用于读出文件中的一行内容。<br><br><font color=#ff00ff><strong>[例10.3]</strong></font>把命令行参数中的前一个文件名标识的文件， 复制到后一个文件名标识的文件中， 如命令行中只有一个文件名则把该文件写到标准输出文件(显示器)中。<br><font color=#009900>#include&lt;stdio.h&gt;<br>main(int argc,char *argv[])<br>{<br>FILE *fp1,*fp2;<br>char ch;<br>if(argc==1)<br>{<br>printf("have not enter file name strike any key exit");<br>getch();<br>exit(0);<br>}<br>if((fp1=fopen(argv[1],"rt"))==NULL)<br>{<br>printf("Cannot open %s\n",argv[1]);<br>getch();<br>exit(1);<br>}<br>if(argc==2) fp2=stdout;<br>else if((fp2=fopen(argv[2],"wt+"))==NULL)<br>{<br>printf("Cannot open %s\n",argv[1]);<br>getch();<br>exit(1);<br>}<br>while((ch=fgetc(fp1))!=EOF)<br>fputc(ch,fp2);<br>fclose(fp1);<br>fclose(fp2);<br>}</font><br>　　本程序为带参的main<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。程序中定义了两个文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a> fp1 和fp2，分别指向命令行参数中给出的文件。如命令行参数中没有给出文件名，则给出提示信息。程序第18行表示如果只给出一个文件名，则使fp2指向标准输出文件(即显示器)。程序第25行至28行用循环语句逐个读出文件1中的字符再送到文件2中。再次运行时，给出了一个文件名(由例10.2所建立的文件)， 故输出给标准输出文件stdout，即在显示器上显示文件内容。第三次运行，给出了二个文件名，因此把string中的内容读出，写入到OK之中。可用DOS命令type显示OK的内容：字符串读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>ｆｇｅｔｓ和ｆｐｕｔｓ<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:55 <a href="http://www.cnitblog.com/zhangjiang838/articles/26538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26536.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:54:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26536.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26536.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26536.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26536.html</trackback:ping><description><![CDATA[<font color=#ff0000>数据块读写</font><a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a><font color=#ff0000>ｆｒｅａｄ和ｆｗｒｉｔｅ<br><br></font>　　Ｃ语言还提供了用于整块数据的读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。 可用来读写一组数据，如一个数组元素，一个结构变量的值等。读数据块<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用的一般形式为： fread(buffer,size,count,fp); 写数据块<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用的一般形式为： fwrite(buffer,size,count,fp); 其中buffer是一个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，在fread<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>中，它表示存放输入数据的首地址。在fwrite<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>中，它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。<br>例如：<br>fread(fa,4,5,fp); 其意义是从fp所指的文件中，每次读4个字节(一个实数)送入实数组fa中，连续读5次，即读5个实数到fa中。<br>[例10.6]从键盘输入两个学生数据，写入一个文件中， 再读出这两个学生的数据显示在屏幕上。<br><font color=#009900>#include&lt;stdio.h&gt;<br>struct stu<br>{<br>char name[10];<br>int num;<br>int age;<br>char addr[15];<br>}boya[2],boyb[2],*pp,*qq;<br>main()<br>{<br>FILE *fp;<br>char ch;<br>int i;<br>pp=boya;<br>qq=boyb;<br>if((fp=fopen("stu_list","wb+"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>printf("\ninput data\n");<br>for(i=0;i&lt;2;i++,pp++)<br>scanf("%s%d%d%s",pp-&gt;name,&amp;pp-&gt;num,&amp;pp-&gt;age,pp-&gt;addr);<br>pp=boya;<br>fwrite(pp,sizeof(struct stu),2,fp);<br>rewind(fp);<br>fread(qq,sizeof(struct stu),2,fp);<br>printf("\n\nname\tnumber age addr\n");<br>for(i=0;i&lt;2;i++,qq++)<br>printf("%s\t%5d%7d%s\n",qq-&gt;name,qq-&gt;num,qq-&gt;age,qq-&gt;addr);<br>fclose(fp);<br>}</font><br>　　本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件&#8220;stu_list&#8221;，输入二个学生数据之后，写入该文件中， 然后把文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移到文件首，读出两块学生数据后，在屏幕上显示。<br><br><font color=#ff0000>格式化读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>ｆｓｃａｎｆ和ｆｐｒｉｎｔｆ</font><br><br>fscanf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>，fprintf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>与前面使用的scanf和printf <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的功能相似，都是格式化读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。 两者的区别在于 fscanf <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>和fprintf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的读写对象不是键盘和显示器，而是磁盘文件。这两个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的调用格式为： fscanf(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，格式字符串，输入表列)； fprintf(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，格式字符串，输出表列)； 例如：<br>fscanf(fp,"%d%s",&amp;i,s);<br>fprintf(fp,"%d%c",j,ch); <br>用fscanf和fprintf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>也可以完成例10.6的问题。修改后的程序如例10.7所示。<br>[例10.7]<br><font color=#009900>#include&lt;stdio.h&gt;<br>struct stu<br>{<br>char name[10];<br>int num;<br>int age;<br>char addr[15];<br>}boya[2],boyb[2],*pp,*qq;<br>main()<br>{<br>FILE *fp;<br>char ch;<br>int i;<br>pp=boya;<br>qq=boyb;<br>if((fp=fopen("stu_list","wb+"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>printf("\ninput data\n");<br>for(i=0;i&lt;2;i++,pp++)<br>scanf("%s%d%d%s",pp-&gt;name,&amp;pp-&gt;num,&amp;pp-&gt;age,pp-&gt;addr);<br>pp=boya;<br>for(i=0;i&lt;2;i++,pp++)<br>fprintf(fp,"%s %d %d %s\n",pp-&gt;name,pp-&gt;num,pp-&gt;age,pp-&gt;<br>addr);<br>rewind(fp);<br>for(i=0;i&lt;2;i++,qq++)<br>fscanf(fp,"%s %d %d %s\n",qq-&gt;name,&amp;qq-&gt;num,&amp;qq-&gt;age,qq-&gt;addr);<br>printf("\n\nname\tnumber age addr\n");<br>qq=boyb;<br>for(i=0;i&lt;2;i++,qq++)<br>printf("%s\t%5d %7d %s\n",qq-&gt;name,qq-&gt;num, qq-&gt;age,<br>qq-&gt;addr);<br>fclose(fp);<br>}</font><br>　　与例10.6相比，本程序中fscanf和fprintf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>每次只能读写一个结构数组元素，因此采用了循环语句来读写全部数组元素。 还要注意<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>变量pp,qq由于循环改变了它们的值，因此在程序的25和32行分别对它们重新赋予了数组的首地址。<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:54 <a href="http://www.cnitblog.com/zhangjiang838/articles/26536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26537.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:54:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26537.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26537.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26537.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26537.html</trackback:ping><description><![CDATA[一、<font color=#ff0000>读字符串<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>fgets<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a></font>的功能是从指定的文件中读一个字符串到字符数组中，<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用的形式为： fgets(字符数组名，n，文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。例如：fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。<br><strong><font color=#ff00ff>[例10.4]</font></strong>从e10_1.c文件中读入一个含10个字符的字符串。<br><font color=#009900>#include&lt;stdio.h&gt;<br>main()<br>{<br>FILE *fp;<br>char str[11];<br>if((fp=fopen("e10_1.c","rt"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>fgets(str,11,fp);<br>printf("%s",str);<br>fclose(fp);<br>}</font><br>　　本例定义了一个字符数组str共11个字节，在以读文本文件方式打开文件e101.c后，从中读出10个字符送入str数组，在数组最后一个单元内将加上'\0'，然后在屏幕上显示输出str数组。输出的十个字符正是例10.1程序的前十个字符。<br><br>　　对fgets<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>有两点说明：<br>1. 在读出n-1个字符之前，如遇到了换行符或EOF，则读出结束。<br>2. fgets<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>也有返回值，其返回值是字符数组的首地址。<br><br><font color=#ff0000>二、写字符串<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>fputs</font><br><br>fputs<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的功能是向指定的文件写入一个字符串，其调用形式为： fputs(字符串，文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>) 其中字符串可以是字符串常量，也可以是字符数组名， 或<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a> 变量，例如：<br>fputs(&#8220;abcd&#8220;，fp)；<br>其意义是把字符串&#8220;abcd&#8221;写入fp所指的文件之中。[例10.5]在例10.2中建立的文件string中追加一个字符串。<br><font color=#009900>#include&lt;stdio.h&gt;<br>main()<br>{<br>FILE *fp;<br>char ch,st[20];<br>if((fp=fopen("string","at+"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>printf("input a string:\n");<br>scanf("%s",st);<br>fputs(st,fp);<br>rewind(fp);<br>ch=fgetc(fp);<br>while(ch!=EOF)<br>{<br>putchar(ch);<br>ch=fgetc(fp);<br>}<br>printf("\n");<br>fclose(fp);<br>}</font><br>　　本例要求在string文件末加写字符串，因此，在程序第6行以追加读写文本文件的方式打开文件string 。 然后输入字符串， 并用fputs<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>把该串写入文件string。在程序15行用rewind<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>把文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移到文件首。 再进入循环逐个显示当前文件中的全部内容。<br>
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:54 <a href="http://www.cnitblog.com/zhangjiang838/articles/26537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26535.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:53:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26535.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26535.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26535.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26535.html</trackback:ping><description><![CDATA[<font color=#ff0000>文件的随机读写<br><br></font>　　前面介绍的对文件的读写方式都是顺序读写， 即读写文件只能从头开始，顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>到需要读写的位置，再进行读写，这种读写称为随机读写。 实现随机读写的关键是要按要求移动位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，这称为文件的定位。文件定位移动文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>主要有两个， 即 rewind <a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>和fseek<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br><br>　　rewind<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>前面已多次使用过，其调用形式为： rewind(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； 它的功能是把文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移到文件首。 下面主要介绍<br>fseek<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br><br>　　fseek<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用来移动文件内部位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，其调用形式为： fseek(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>，位移量，起始点)； 其中：&#8220;文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>&#8221;指向被移动的文件。 &#8220;位移量&#8221;表示移动的字节数，要求位移量是long型数据，以便在文件长度大于64KB 时不会出错。当用常量表示位移量时，要求加后缀&#8220;L&#8221;。&#8220;起始点&#8221;表示从何处开始计算位移量，规定的起始点有三种：文件首，当前位置和文件尾。<br>其表示方法如表10.2。 <br>起始点 　　　表示符号 　　　数字表示<br>──────────────────────────<br>文件首 　　　SEEK—SET　　　　0<br>当前位置 　　SEEK—CUR　　　　1<br>文件末尾 　　SEEK—END 　　　 2<br>例如：<br>fseek(fp,100L,0);其意义是把位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>移到离文件首100个字节处。还要说明的是fseek<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>一般用于二进制文件。在文本文件中由于要进行转换，故往往计算的位置会出现错误。文件的随机读写在移动位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>之后， 即可用前面介绍的任一种读写<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>进行读写。由于一般是读写一个数据据块，因此常用fread和fwrite<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。下面用例题来说明文件的随机读写。<br><br><font color=#ff00ff><strong>[例10.8]</strong></font>在学生文件stu list中读出第二个学生的数据。<br><font color=#009900>#include&lt;stdio.h&gt;<br>struct stu<br>{<br>char name[10];<br>int num;<br>int age;<br>char addr[15];<br>}boy,*qq;<br>main()<br>{<br>FILE *fp;<br>char ch;<br>int i=1;<br>qq=&amp;boy;<br>if((fp=fopen("stu_list","rb"))==NULL)<br>{<br>printf("Cannot open file strike any key exit!");<br>getch();<br>exit(1);<br>}<br>rewind(fp);<br>fseek(fp,i*sizeof(struct stu),0);<br>fread(qq,sizeof(struct stu),1,fp);<br>printf("\n\nname\tnumber age addr\n");<br>printf("%s\t%5d %7d %s\n",qq-&gt;name,qq-&gt;num,qq-&gt;age,<br>qq-&gt;addr);<br>}</font><br>　　文件stu_list已由例10.6的程序建立，本程序用随机读出的方法读出第二个学生的数据。程序中定义boy为stu类型变量，qq为指向boy的<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。以读二进制文件方式打开文件，程序第22行移动文件位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。其中的i值为1，表示从文件头开始，移动一个stu类型的长度， 然后再读出的数据即为第二个学生的数据。
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:53 <a href="http://www.cnitblog.com/zhangjiang838/articles/26535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言教程第十章:文件</title><link>http://www.cnitblog.com/zhangjiang838/articles/26534.html</link><dc:creator>悲惨的狼</dc:creator><author>悲惨的狼</author><pubDate>Mon, 30 Apr 2007 18:52:00 GMT</pubDate><guid>http://www.cnitblog.com/zhangjiang838/articles/26534.html</guid><wfw:comment>http://www.cnitblog.com/zhangjiang838/comments/26534.html</wfw:comment><comments>http://www.cnitblog.com/zhangjiang838/articles/26534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/zhangjiang838/comments/commentRss/26534.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/zhangjiang838/services/trackbacks/26534.html</trackback:ping><description><![CDATA[<font color=#ff0000>文件检测</font><a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a><br><br>Ｃ语言中常用的文件检测<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>有以下几个。<br>一、文件结束检测<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>feof<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用格式： feof(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； <br>功能：判断文件是否处于文件结束位置，如文件结束，则返回值为1，否则为0。<br><br>二、读写文件出错检测<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>ferror<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用格式： ferror(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>)； <br>功能：检查文件在用各种输入输出<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>进行读写时是否出错。 如ferror返回值为0表示未出错，否则表示有错。<br><br>三、文件出错标志和文件结束标志置0<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>clearerr<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>调用格式： clearerr(文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>); <br>功能：本<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用于清除出错标志和文件结束标志，使它们为0值。<br><br><font color=#ff0000>Ｃ库文件</font><br><br>Ｃ系统提供了丰富的系统文件，称为库文件，C的库文件分为两类，一类是扩展名为".h"的文件，称为头文件， 在前面的包含命令中我们已多次使用过。在".h"文件中包含了常量定义、 类型定义、宏定义、<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>原型以及各种编译选择设置等信息。另一类是<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>库，包括了各种<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的目标代码，供用户在程序中调用。 通常在程序中调用一个库<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>时，要在调用之前包含该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>原型所在的".h" 文件。<br>在附录中给出了全部库<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>ALLOC.H 　　　说明内存管理<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>(分配、释放等)。<br>ASSERT.H 　 　定义 assert调试宏。<br>BIOS.H 　　 　说明调用IBM—PC ROM BIOS子程序的各个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>CONIO.H 　　　说明调用DOS控制台I/O子程序的各个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>CTYPE.H 　　　包含有关字符分类及转换的名类信息(如 isalpha和toascii等)。<br>DIR.H 　　　　包含有关目录和路径的结构、宏定义和<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>DOS.H 　　　　定义和说明MSDOS和8086调用的一些常量和<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>ERRON.H 　　　定义错误代码的助记符。<br>FCNTL.H 　　　定义在与open库子程序连接时的符号常量。<br>FLOAT.H 　　　包含有关浮点运算的一些参数和<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>GRAPHICS.H 　 说明有关图形功能的各个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>，图形错误代码的常量定义，正对不同驱动程序的各种颜色值，及<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用到的一些特殊结构。<br>IO.H 　　　　 包含低级I/O子程序的结构和说明。<br>LIMIT.H 　　　包含各环境参数、编译时间限制、数的范围等信息。<br>MATH.H 　　　 说明数学运算<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>，还定了 HUGE VAL 宏， 说明了matherr和matherr子程序用到的特殊结构。<br>MEM.H 　　　　说明一些内存操作<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>(其中大多数也在STRING.H 中说明)。<br>PROCESS.H 　　说明进程管理的各个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>，spawn&#8230;和EXEC &#8230;<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的结构说明。<br>SETJMP.H 　　 定义longjmp和setjmp<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>用到的jmp buf类型， 说明这两个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>SHARE.H 　　　定义文件共享<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的参数。<br>SIGNAL.H 　　 定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量，说明rajse和signal两个<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>STDARG.H 　　 定义读<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>参数表的宏。(如vprintf,vscarf<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>)。<br>STDDEF.H 　　 定义一些公共数据类型和宏。<br>STDIO.H 　　　定义Kernighan和Ritchie在Unix System V 中定义的标准和扩展的类型和宏。还定义标准I/O 预定义流：stdin,stdout和stderr，说明 I/O流子程序。<br>STDLIB.H 　　 说明一些常用的子程序：转换子程序、搜索/ 排序子程序等。<br>STRING.H 　　 说明一些串操作和内存操作<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>。<br>SYS\STAT.H 　 定义在打开和创建文件时用到的一些符号常量。<br>SYS\TYPES.H 　说明ftime<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>和timeb结构。<br>SYS\TIME.H 　 定义时间的类型time[ZZ(Z] [ZZ)]t。<br>TIME.H 　　　 定义时间转换子程序asctime、localtime和gmtime的结构，ctime、 difftime、 gmtime、 localtime和stime用到的类型，并提供这些<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>的原型。<br>VALUE.H 　　　定义一些重要常量， 包括依赖于机器硬件的和为与Unix System V相兼容而说明的一些常量，包括浮点和双精度值的范围。<br><br><font color=#cc0000><strong>本章小结</strong></font><br><br>1. Ｃ系统把文件当作一个&#8220;流&#8221;，按字节进行处理。 <br><br>2. Ｃ文件按编码方式分为二进制文件和ASCII文件。<br><br>3. Ｃ语言中，用文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>标识文件，当一个文件被 打开时， 可取得该文件<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>。<br><br>4. 文件在读写之前必须打开，读写结束必须关闭。<br><br>5. 文件可按只读、只写、读写、追加四种操作方式打开，同时还必须指定文件的类型是二进制文件还是文本文件。<br><br>6. 文件可按字节，字符串，数据块为单位读写，文件也可按指定的格式进行读写。<br><br>7. 文件内部的位置<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>可指示当前的读写位置，移动该<a class=channel_keylink href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%D6%B8%D5%EB&amp;Submit=+%CB%D1%CB%F7+">指针</a>可以对文件实现随机读写。
<img src ="http://www.cnitblog.com/zhangjiang838/aggbug/26534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/zhangjiang838/" target="_blank">悲惨的狼</a> 2007-05-01 02:52 <a href="http://www.cnitblog.com/zhangjiang838/articles/26534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>