1. c语言中文件指针怎样向前移动一个字节
你是用C标准I/O库函数的话,
(1)文件定位:
文件定位指读取或设置文件当前读写点,所有的通过文件指针读写数据的函数,都是从文件的当前读写点读写数据的。
常用的函数有:
#include
<stdio.h>
int
fseek(FILE
*stream,
long
offset,
int
whence);
fseek
设置当前读写点到
offset
处,
whence
可以是
SEEK_SET,SEEK_CUR,SEEK_END,这些值决定是
从文件头、当前点和文件尾计算偏移量
offset.
你可以定义一个文件指针FILE
*fp,当你打开一个文件时,文件指针指向开头,
你要指到多少个字节,只要控制偏移量就好,例如
相对当前位置往后移动一个字节:fseek(fp,1,SEEK_CUR);中间的值就是偏移量。
如果你要往前移动一个字节,直接改为负值就可以:fseek(fp,-1,SEEK_CUR)
2. C语言调试时文件指针FILE *fp出错
printf("您选择的是:编号 请选择您要查询的编号: ");
scanf("%s",bianhao);
//本来你的程序是这样的
FILE*fp1=fopen("my.dat","r");//文件只能打开一次不能重复打开
while(1)
{
if(fgets(buff,1024,fp1)==NULL)
break;
if(strcmp(buff,bianhao)==0)//这里比较字符串不用取地址
printf("%s",buff);
}
fclose(fp1);
//不过你的要求是{第一个字符等于输入的值}那应该是这样
printf("您选择的是:编号 请选择您要查询的编号: ");
scanf("%c",bianhao);//这里的bianhao是char不是char[]
FILE*fp1=fopen("my.dat","r");
while(1)
{
if(fgets(buff,1024,fp1)==NULL)
break;
if(buff[0]==bianhao)
printf("%s",buff);
}
fclose(fp1);
//但是这样显然不符合逻辑编号应该是多个字符所以也可能是这样
printf("您选择的是:编号 请选择您要查询的编号: ");
scanf("%s",bianhao);//依然输入char[]
FILE*fp1=fopen("my.dat","r");
while(1)
{
if(fgets(buff,1024,fp1)==NULL)
break;
if(strncmp(buff,bianhao,strlen(bianhao))==0)//这里的函数改成strncmp具体意思去网络
printf("%s",buff);
}
fclose(fp1);
3. C语言 如何通过文件指针获得文件名
在tc20中,一旦你成功打开一个文件,他将返回一个文件指针。
FILE*fp;
fp=fopen("abc.dat",文件状态(如w,r,r+));
当上面的操作成功后文件指针fp就会赋予你打开文件的最基本信息!
FILE结构在TurboC在stdio.h文件中有以下的文件类型声明:
typedefstruct
{
shortlevel;/*缓冲区“满”或“空”的程度*/
unsignedflags;/*文件状态标志*/
charfd;/*文件描述符(句柄)*/
unsignedcharhold;/*如无缓冲区不读取字符*/
shortbsize;/*缓冲区的大小*/
unsignedchar*buffer;/*数据缓冲区的位置*/
unsignedar*curp;/*指针,当前的指向*/
unsignedistemp;/*临时文件,指示器*/
shorttoken;/*用于有效性检查*/
}FILE;
为管理你打开的文件,操作系统为所有的文件创建一个打开文件信息的结构数组---文件控制块(FCB),而文件描述符就承担了访问与之对应的文件控制块的使命,他在c中就充当文件句柄。每一个文件都需要唯一的一个标识,这样才能管理若干个文件
FCB他存贮这你所有打开文件的信息,而只有通过文件句柄才能访问与之对应的FCB,从而访问你的文件.
文件句柄,就是FCB结构数组的下标
所以,通过文件指针获得文件名的操作路线:
FILE*fp;
charfd=fp->fd;
FCB*fcb;
char*filiname=fcb[fd].filiname
利用FCB(文件控制块)操作的例子见:
http://www.asme.net/blog/user/postcontent.jsp?neighborId=8747&kindLevel=1&kindId=24655&postId=40710&readSg=1
4. c语言中读文本文档如何让文件指针换到下行首
文本文档的换行标识符为'
', 当读完
后,指针就移动到了下行的行首。
以此为思路可以得到代码:
intmoveToNextLine(FILE*fp)
{
intc;
if(fp==NULL)return-1;//文件指针非法
while(1)
{
c=fgetc(fp);
if(c==EOF)returnEOF;//到文件尾,不存在下一行
if(c==' ')break;//读到需要的换行符。
}
return0;
}
在读取中,FILE*指针会自动完成移位,所以不需要显式的返回指针。
5. C语言 文件的指针是什么类型
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);
//关闭文件,刷新缓存到物理磁盘上