VC++中文件指针如何移动?

VC++中文件指针如何移动?,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

解析:

CFile file

file.Open("YourFileName",CFile::modeRead)以读方式打开

file.Seek(10,CFile::end)定位到文件倒数第10个字节

file.Seek(10,CFile::begin)定位到文件顺数第10个字节

file.Seek(10,CFile::current)定位到当前之后第10个字节

和C的文件 *** 作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入 *** 作在文件中的位置;另一个是写指针,它下次写 *** 作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:

istream &seekg(streamoff offset,seek_dir origin)

ostream &seekp(streamoff offset,seek_dir origin)

streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:

ios::beg:文件开头

ios::cur:文件当前位置

ios::end:文件结尾

这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。

例:

file1.seekg(1234,ios::cur)//把文件的读指针从当前位置向后移1234个字节

file2.seekp(1234,ios::beg)//把文件的写指针从文件开头向后移1234个字节

所以你的如果是二进制文件, *** 作文件读写指针是有意义的,ASCII文件,则由于写入int的长度不同,无法定位指针

c语言文件类型指针是通过file

*fp

这种形式进行定义的。

关于file结构在vc6中有如下定义:

#ifndef _file_defined

struct _iobuf {

char *_ptr//文件输入的下一个位置

int _cnt//当前缓冲区的相对位置

char *_base//指基础位置(即是文件的起始位置)

int _flag//文件标志

int _file//文件描述符id

int _charbuf//检查缓冲区状况,如果无缓冲区则不读取

int _bufsiz//文件缓冲区大小

char *_tmpfname//临时文件名

}

typedef struct _iobuf file

#define _file_defined

#endifc程序用不同的file结构管理每个文件。程序员可以使用文件,但是不需要知道file结构的细节。实际上,file结构是间接地 *** 作系统的文件控制块(fcb)来实现对文件的 *** 作的,如下图:

上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数。

文件是存放在物理磁盘上的,包括文件控制块(fcb)和数据块。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息。数据块用来存储实际的内容。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据。

相关函数:

file

*fopen(

char

*file,

char

*open_mode

)

//打开文件,读文件到内存,返回文件信息结构指针

int

fread(

char

s,

int

size,

int

num,

file

*fp

)

//按字节读取文件内容到s中

int

fwrite(

char

s,

int

size,

int

num,

file

*fp

)

//按字节将s地址中的数据写到文件中

char

*fgets(

char

*s,

int

max_size,

file

*fp)

//读一行数据到缓冲区s中

int fseek(

file

*fp,

long

offset,

int

whence)

//移动文件指针到指定位置

void

rewind(file

*fp)

//回到文件头

long

ftell(file

*fp)

//得到当前文件偏移位置

fclose(fp)

//关闭文件,刷新缓存到物理磁盘上


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11639575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存