文件管理

文件操作三步:打开、读写、关闭。


一、文件的打开与关闭

FILE *fp;

fp = fopen("test.txt", "r");

......

fclose(fp);

二、文件操作函数

1、单字符的读写函数

int fputc(int ch, FILE *fp);

int fgetc(FILE *fp);

每次写入和读入一个字符,文件位置指针会自动指向下一个字符。


用feof(fp)判断文件是否真正的结束。

eg:

#include <stdio.h>


main()
{
FILE *fp_in = NULL;
if((fp_in = fopen("test.txt", "r")) == NULL){
printf("open error");
return;
}
FILE *fp_out = NULL;
if((fp_out = fopen("out.txt", "w")) == NULL){
printf("open error");
                return;
}
while(!feof(fp_in)){
//printf("fgetc:%c\n",fgetc(fp_in));
fputc(fgetc(fp_in), fp_out);
}
fclose(fp_in);
fclose(fp_out);
}

运行结果:将test.txt的内容复制到了out.txt里面。


2、字符串读写函数

char *fgets(char *str,  int n, FILE *fp); 从fp所指向的文件中读取n-1个字符,并将这些字符放到以str为起始地址的单元中。如果在读入n-1个字符之前遇到换行符或者eof,则读入结束。字符串的最后加一个‘\0’字符。成功返回输入串的首地址;遇到文件结束或失败返回NULL

int fputs(char *str, FILE *fp);向fp指向的文件写入以str为首地址的字符串。写入成功返回0,出错返回非0值。


3、格式化读写函数

fprintf(fp, 格式字符串, 输出表列);

fscanf(fp, 格式字符串, 输入表列);

同printf、scanf,只是读写对象是终端;而带f的读写对象是磁盘文件。


4、数据块读写函数(一般用于二进制文件读写)

从文件读写一块数据(eg:一个数组元素,一个结构体变量的数据记录等)使用数据块读写函数非常方便。

int fread(void *buffer, int size, int count, FILE *fp); buffer 用于存放读入数据的首地址。 size是一个数据块的字节数(每块的大小);count是要读写的数据块的块数。

int fwrite(void *buffer, int size, int count, FILE *fp);buffer 用于存放输出数据的首地址。

#include <stdio.h>

#include <string.h>

struct student

{

         intnum;

         charname[20];

         charsex;

         intage;

         floatscore;

};

main()

{

         structstudent stud;

         charnumstr[20],ch;

         FILE*fp;

        

         if((fp = fopen("student.dat", "wb")) == NULL){

                   printf("can'topen student.dat\n");

                   return;

         }

        

         stud.num= 1;

         strcpy(stud.name,"yuanli");

         stud.sex='n';

         stud.age=30;

         stud.score= 98.88;

         printf("sizeof:%d\n",sizeof(structstudent)); 

         printf("num:%d,name:%s,sex:%c,age:%d,score:%f\n",stud.num,stud.name,stud.sex,stud.age,stud.score);

         if(fwrite(&stud,sizeof(struct student), 1 ,fp)<1)

                   printf("writeerror\n");

         printf("writesuccess\n");

         fclose(fp);

}


5、文件随机读写

对文件可以顺序读写,也可随机读写。可以通过文件位置指针函数,实现文件的定位读写。

(1)      位置指针复位函数。

rewind(FILE *fp); 是将文件重新定位到文件开始的地方

(2)      位置指针的随机移动函数

int fseek(FILE*fp, long offset, int base);

将文件的位置指针移动到以base为起始点,offset为位移量的位置,同时清除文件结束标志。

base:SEEK_SET 、 SEEK_CUR、SEEK_END,分别表示文件开始、当前位置和文件末尾。

参数offset表示以起始点为基准,向前或向后移动的字节数(正、负);

(3)      获取文件位置指针当前位置的函数。

long ftell(FILE *fp);

            返回位置指针相对于文件开头的位移量,若出错则返回-1.

#include <stdio.h>

#include <stdlib.h>

 

main()

{

         FILE*fp = NULL;

         if((fp= fopen("student.dat", "r")) == NULL){

                   printf("openerror\n");

                   return;

         }

         fseek(fp,0, SEEK_END);

         longfilesize = ftell(fp);

         printf("filesize:%ld\n",filesize);

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值