12.2.3文件指针的定位
1 int fseek( FILE *stream, long offset, int origin );
该函数的第三个参数有三种默认的值,SEEK_CUR,SEEK_END,SEEK_SET,实际上是三个宏定义值,在STDIO.h文件中可以看到它们的值分别是1,2,0。分别表示定位到文件的当前位置,结束位置和开始位置。
1 fseek(pFile,0,SEEK_SET);
2 fwrite("haha",1,strlen("haha"),pFile);
将指针定位到已经打开的文件的其实位置,并写入新的数据。完成此操作时候会发现文件中起始位置的四个字符已经被替换掉了。尝试了下改变文件的打开模式,但是都不能实现a+b的效果。
12.2.3文件的读取
1 size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
由于C语言中字符串是以”\0”符号结束的。在显示字符串的时候,系统会寻找”\0”字符,因此在写入数据的时候需要在结尾添加一个”\0”,在读取数据的时候,可以动态创建一个数据长度+1的字符数组,然后将最后一个元素设置为”\0”。
写入文件时:
01 void CFileView::OnFileRead()
02 {
03 // TODO: Add your command handler code here
04 FILE *pFile=fopen("1.txt","w");
05 //fwrite("new buffer",1,strlen("new buffer"),pFile);
06 char buf[22]="www.colsir.com";
07 buf[21]='\0';
08 fwrite(buf,1,22,pFile);
09 fclose(pFile);
10 }
读取文件时:
01 void CFileView::OnFileWrite()
02 {
03 // TODO: Add your command handler code here
04 FILE *pFile=fopen("1.txt","r");
05 char *pbuf;
06 fseek(pFile,0,SEEK_END); //为了获取数据的长度,将指针指向文件的末尾
07 int len=ftell(pFile);
08 pbuf =new char[len+1];
09 //rewind(pFile); //下同fseek(pFile,0,SEEK_SET);