C语言第三十七弹---文件操作(下)
✨个人主页: 熬夜学编程的小林
💗系列专栏: 【C语言详解】 【数据结构详解】
文件操作
1、文件的随机读写
1.1、fseek
1.2、ftell
1.3、rewind
2、文件读取结束的判定
2.1、被错误使用的 feof
3、文件缓冲区
总结
1、文件的随机读写
1.1、fseek
根据文件指针的位置和偏移量来定位文件指针。
将与流关联的位置指示器设置为新位置。
对于以二进制模式打开的流,通过向原点指定的参考位置添加偏移来定义新位置。
对于以文本模式打开的流,偏移量应为零或上一次调用 ftell 返回的值,并且 origin 必须为SEEK_SET。
int fseek ( FILE * stream, long int offset, int origin ); //第一个参数是文件指针的名字(流) //第二个参数是文件指针向后偏移数 可以为正数也可以为负数 正数为从前向后偏移 负数为从后先前偏移 //第三个参数是fseek函数中规定的三个选项之中的其一。
Constant | Reference position 参考位置 |
---|---|
SEEK_SET | Beginning of file //文件开头 |
SEEK_CUR | Current position of the file pointer //文件当前位置 |
SEEK_END | End of file * //文件结尾 |
例子:
/* fseek example */ #include int main () { FILE * pFile; pFile = fopen ( "example.txt" , "wb" ); fputs ( "This is an apple." , pFile ); fseek ( pFile , 9 , SEEK_SET ); fputs ( " sam" , pFile ); fclose ( pFile ); return 0; }
为什么最后在记事本中打印出的结果是This is a sample.呢?
原因是在第一次fputs中是把This is an apple.先放入记事本当中,当调用fseek函数时,从当前的文件指针处向后偏移9个字节,文件指针一开始默认指向的是文件的首地址处。因此向后偏移9个字节后(偏移一个字节包括空格)指向的是a之后的位置。而第二次fputs函数是将“ sam”这个内容在上次文件指针指向的地址处开始写入。因此在记事本打印的结果是This is a sample.
1.2、ftell
返回文件指针相对于起始位置的偏移量
long int ftell ( FILE * stream ); //参数为指向标识流的 FILE 对象的指针。
例子:
/* ftell example : getting size of a file */ #include int main () { FILE * pFile; long size; pFile = fopen ("myfile.txt","rb"); if (pFile==NULL) perror ("Error opening file"); else { fseek (pFile, 0, SEEK_END); // non-portable size=ftell (pFile); fclose (pFile); printf ("Size of myfile.txt: %ld bytes.\n",size); } return 0; }
因为是从文件内容的最末尾处开始相对于起始位置的偏移量。则结果为17。
1.3、rewind
让文件指针的位置回到文件的起始位置。
void rewind ( FILE * stream );
例子:
/* rewind example */ #include int main () { int n; FILE * pFile; char buffer [27]; pFile = fopen ("myfile.txt","w+"); for ( n='A' ; n
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...