网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
源代码在线查看: 12.2.5 文件指针定位.txt
12.2.5 文件指针定位
当调用文件写入函数向文件中写入数据后,还可以再次写入其他数据。例如,可以在如例 12-3所示
的 OnFileWrite函数中第 4行代码之后添加下面这行代码:
食 fwrite( "欢迎访问., 1, strlen("欢迎访问"), pFile);
Build井运行 File程序,井单击【文件操作\写入文件】菜单项,然后打开l.txt文件,可以看到紧
接着上次的数据写入了新数据。此时该文件的内容如图 12.4所示。
图 12.4连续写入数据后的文件内容
在第二次调用 fwrite函数时,系统如何知道应该从文件中何处开始继续写入数据呢?对于 C语言的
文件操作来说,它有一个文件指针,该指针会随时根据我们对文件的操作来移动位置,始终指向文
件下一个将要写入的位置。当执行写入操作之后,文件指针就指向了所写数据占据位置的下一个位
置。如果希望在写入数据后,返回到文件的开始位置处再写入数据,就需要将这个文件指针移动到
文件开始位置,这可以利用 C语言中的 fseek函数来实现。该函数的作用是把文件指针从当前位置
移动到指定的位置。 fseek函数声明形式如下所示:
int fseek( FILE *stream, long offset , int origin );
可以看到. fseek函数有三个参数,各参数的含义分别如下所述。
. stream
指向 FILE结构体指针。
. offset
设定偏移量。
. origin
指定文件指针的起始位置。该参数可以取如表 12.3所示的三个值。
表 12.3 origin参数的取值
取 值 说 明
SEEK_CUR 从文件指针当前位置处开始
SEEK_END 从文件的结尾处开始
SEEK_SET 从文件的开始处开始
如果希望将文件指针移动到文件的开始位置处,就应该将 fseek函数的 origin参数设置为
SEEK_SET.并且将 offset参数设置为 0。因此,可以在已有的 OnFileWrite函数中第二次调用
fwrite函数(即卡述食符号所示代码)之前先将文件指针的位置移动到文件开始处,这样,第二次调
用 fwrite函数写入的数据将出现在文件的开始处,这时的 OnFileWrite函数的代码如例 12-4所示。
例 12-4
void CFileview : :OnFileWrite()
FILE *pFile=fopen("l.txt" , "w" );
fwrite ("http: //www. sunxin . org" , 1 , strlen (..ht tp: //www.sunxin.org..).pF
ile) ;
fseek(pFile , 0, SEEK_SET);
fwrite(" ftp :" , l , strlen(" ftp : ") , pFile);
11 fwrite( " 欢迎访问 " , 1 , s t r 1 en ( "欢迎访问") , pFile);
fclose(pFile) ;
Build井运行 File程序,单击【文件操作飞写入文件】菜单项,然后打开l.txt文件,可以看到此时
文件的内容为: "ftp://www.sunxin.org" (如图 12.5所示)。即第二次调用 fwrite函数写入文件的
内容位于文件的开始处。这就是利用 fseek函数控制文件指针位置的实现。
图 12.5利用 fseek函数移动文件指针后写入文件的结果