2012年(1008)
分类:
2012-08-01 11:18:48
原文地址:文件编程 作者:luozhiyong131
/*
* 文件打开与关闭
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
if((fp = fopen("F:\\lzy.txt","w+")) == NULL) //以读/写方式找开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
else
{
printf("打开成功!\n");
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按字节写入文件
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
char c;
if((fp = fopen("F:\\lzy.txt","w+")) == NULL) //打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
else
{
while((c = getchar()) != '\n')
{
if(fputc(c,fp) == EOF) /*写入字符,判断是否写入失败*/
{
printf("写入失败!\n");
exit(0);
}
}
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按字节读取文件
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
if((fp = fopen("F:\\lzy.txt","r+")) == NULL) //打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
else
{
while(!feof(fp)) /*判断文件是否结束*/
{
printf("%c",fgetc(fp)); /*按字节读取*/
}
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按字符串输入文件
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
char c[30];
if((fp = fopen("F:\\lzy.txt","w+")) == NULL) //打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
else
{
printf("输入一串字符:");
gets(c);
if(fputs(c,fp) != 0) /*写入字符,判断是否写入失败*/
{
printf("写入失败!\n");
exit(0);
}
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按字符串输出文件
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
char c[30];
if((fp = fopen("F:\\lzy.txt","r+")) == NULL) //打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
else
{
if(fgets(c, 30, fp) != NULL)
{
printf("%s\n",c);
}
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 文件数据块操作
* Lzy 2011-5-28
*/
#include
struct student
{
int id;
char name[10];
int score;
};
int main(void)
{
FILE *fp; //定义文件指针
struct student stu[3],stu1[3], *p;
if((fp = fopen("F:\\lzy.txt","wb+")) == NULL) //以二进制方式打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
for(p = stu; p < stu +3; p++) //结构体初始化
{
printf("输入学生学号 姓名 分数\n");
scanf("%d %s %d",&p->id, p->name, &p->score);
}
fwrite(stu, sizeof(struct student), 3 ,fp); /*数据写入文件*/
rewind(fp); /*文件读写指针复位*/
fread(stu1, sizeof(struct student), 3 ,fp); /*数据输出赋给stu1*/
printf("学生学号 姓名 分数\n");
for(p = stu1; p < stu1 + 3; p++) /*打印*/
{
printf(" %d\t %s\t %d\n",p->id, p->name, p->score);
}
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按格式化写入函数fprintf()
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
int a = 55;
char b = 98;
if((fp = fopen("F:\\lzy.txt","w+")) == NULL) //以二进制方式打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
fprintf(fp,"%d, %c", a, b); /*把变量a,b 以逗号作分隔符,输出到fp所指向的文件中*/
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 按格式化读取函数fscanf()
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
int a ;
char b ;
if((fp = fopen("F:\\lzy.txt","r+")) == NULL) //以二进制方式打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
fscanf(fp,"%d, %c", &a, &b); /*从fp中读取的内容,分别赋给变量a,b (注意:以逗号作分隔符)*/
printf("%d %c\n",a,b);
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* putw和getw函数
* Lzy 2011-5-28
*/
#include
int main(void)
{
FILE *fp; //定义文件指针
int a;
if((fp = fopen("F:\\lzy.txt","w+")) == NULL) //以二进制方式打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
putw(66,fp); /*整形数写入*/
rewind(fp); /*重设读写指针*/
a = getw(fp); /*整形数读出*/
printf("%d\n",a);
fclose(fp); /*闭关该文件*/
return 0;
}
/*
* 随机读写与fseek()函数
* Lzy 2011-5-28
*/
#include
struct Stu
{
int id;
char name[10];
}stu = {1,"lzy"};
int main(void)
{
FILE *fp; //定义文件指针
char name[10];
if((fp = fopen("F:\\lzy.txt","wb+")) == NULL) //以二进制方式打开lzy.txt
{
printf("打开失败!\n");
exit(0);
}
fwrite(&stu,sizeof(stu),1,fp); /*块方式写入数据*/
fseek(fp,sizeof(int), 0); /*移动指针*/
fread(name,10,1,fp); /*块方式输出数据*/
printf("%s\n",name);
fclose(fp); /*闭关该文件*/
return 0;
}
3. 文件检测函数
(1)feof函数
当在对文件进行读操作时,为了避免读完文件中数据时,继续对文件进行读取操作,可以通过来检测文件是否结束。
函数调用格式:
feof(文件指针);
函数功能:
判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。一般当该函数返回值为1时,结束对文件的读取操作。
(2)ferror()函数
在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测。 用法: int ferror(文件指针);
功能:
如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错。对同一文件,每次调用输入输出函数均产生一个新的ferror()函数值。因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失。 在执行fopen()函数时,系统将ferror()的值自动置为0。
(3) clearerr()函数
用法: void clearerr(文件指针);
功能:将文件错误标志(即ferror()函数的值)和文件结束标志(即feof()函数的值)置为0。对同一文件,只要出错就一直保留,直至遇到clearerr()函数或rewind()函数,或其它任何一个输入输出库函数。
(4) 返回文件当前位置的函数ftell()
由于文件的位置指针可以任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题。
用法:long ftell(文件指针);
功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。
调用格式:i = ftell( fp );
如果返回值为-1L,则表明调用出错。例如:
offset=ftell(fp);
if (offset= =-1L)
printf(“ftell() error\n”);