
功能
注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
实例
#include <stdio.h>
long filesize(FILE *stream)
int main(void)
{
FILE *stream
stream = fopen("MYFILE.TXT", "w+")
fprintf(stream, "This is a test")
printf("Filesize of MYFILE.TXT is %ld bytes\n", filesize(stream))
fclose(stream)
return 0
}
long filesize(FILE *stream)
{
long curpos, length
curpos = ftell(stream)
fseek(stream, 0L, SEEK_END)
length = ftell(stream)
fseek(stream, curpos, SEEK_SET)
return length
}
int fseek( FILE *stream, long offset, int origin )
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0)把文件内部指针移动到离文件开头100字节处;
fseek(fp,100L,1)把文件内部指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2)把文件内部指针退回到离文件结尾100字节处。
用fgets一行行读入,读到EOF结束。
每读一行用
下面函数找到address
后面方括号
i1,i2
位置
void
f1(char
*str,
int
*i1,
int
*i2){
int
i,j=0,L
L
=
strlen(str)
if
(L
<
8)
{
printf("no
address
line\n")
*i1=0
*i2=0}
for
(i=0i<Li++){
if
(
strncmp(str+i,"address",7)==0)
{j=i+7
break}
}
for
(i=ji<Li++){
if
(str[i]=='[')
*i1=i
if
(str[i]==']')
{
*i2=i
break}
}
}
从这行字符串中取出地址
str[i1+1]
到
str[i2-1],
写入文件。
调用例子:
main()
{
char
str[400]=".......address..[123
bay
street
Apt.
5]
abcdb
ssks
567
"
char
add[80]
int
i,j,i1,i2
f1(&str[0],&i1,&i2)
printf("%d
%d",i1,i2)
for
(i=i1+1i<i2i++)
{
j=i-i1-1
add[j]=str[i]}
add[j+1]='\0'
printf("%s
",add)
return
0
}
定义一个fstream类变量infile.....
输入文件 *** 作:
infile.seekg(100)//输入文件的指针向前移到100字节位置。原型seekg(文件中的位置)
infile.seekg(-50,ios::cur)//输入文件中的指针从当前位置后移50个字节。
//原型,seekg(位移量,参照位置)
参照位置
ios::beg,文件开头,默认值 。
ios::cur 指针当前位置
ios::end文件末尾
....
输出文件 *** 作:
infile.seekp(-75,ios::end)//输出文件中的指针从文件尾后移50个字节。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)