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);
//關閉文件,刷新緩存到物理磁碟上