计算机中文件操作采用的是流的概念
文件格式:数据在文件中都是以二进制形式存储的。数据必须按照存入的类型读出才能恢复其本来面貌。很多文件都有标准的格式比如bmp,jpg,mp3等等。
【函数】
1.基本文件操作函数包括 open read write close lseek creat
int open(const char *pathname,int access,unsigned mode);
pathname——要打开的文件路径或相对路径
access——存取方式
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_CREAT 建立新文件
O_TRUNC 文件存在则删除其所有内容再打开
O_EXCL 与O_CREAT联用,当文件存在时返回-1,否则新建文件
O_APPEND 向文件末尾添加
O_TEXT 以文本方式打开,字符串"\r\n"自动转换成"\n"。
O_BINARY 以二进制方式打开,原汁原味的体现文件内容。
mode——文件类型及权限,仅在O_CREAT时有效
返回值——如果文件成功打开则返回文件句柄,否则返回-1
***与open相似有一个专门进行新建并打开文件的函数
int creat(*path,mode);
int read(int handle,void *buf,unsigned len);
handle——文件句柄
buf——内存缓冲区
len——试图读入的字节数,不能超过buf的内存大小。
返回值——实际读入的字节数,0表示读到末尾,-1表示出错
int write(int handle,void *buf,unsigned len);
handle——文件句柄
buf len——把从buf 开始的len个字节写入文件
返回值——实际写入的字节数。-1表示出错。
**注意:如果返回的值小于len就是说明这次write没有把len个字节写入,下次write时还会继续写入。
int close(int handle);
handle——文件句柄
关闭成功返回0
long lseek(int handle,long offset,int fromwhere);
文件定位函数
offset——从formwhere开始,移动位置指针offset个字节,offset为正则向文件末尾移动,为负则向文件头移动。
fromwhere——开始移动时的位置
SEEK_SET——文件头
SEEK_CUR——当前位置
SEEK_END——文件尾
返回值——移动后的指针位置,-1代表出错。
**
lseek(fh,4L,SEEK_CUR) 向后跳过4个字节
lseek(fh,-10L,SEEK_END) 跳到文件倒数第十个字节
lseek(fh,0L,SEEK_CUR) 得到当前位置的指针位置
lseek(fh,0L,SEEK_END) 得到文件长度
2.高级文件操作
(1)打开与关闭
fopen fclose
文件打开方式
r 以只读方式打开
w 以只写方式打开
a 以只写方式打开,位置指针指向文件末尾,源文件数据保留
+ 读写方式打开
b 以而二进制方式打开
(2)读写
字符
int fgetc(FILE *fp);//读出
int fputc(int c,FILE *fp);//把c写入文件
字符串
char *fgets(char *s,int n,FILE *fp);
从fp中读入字符串到s中,最多读n-1个字符。当读到回车,换行文件末尾或读满时函数返回。且在字符串末尾添加\0结束符。
int fputs(const char *s,FILE *fp);
将字符串s输出到fp中。返回非负数
(3)格式化读写
int fscanf(FILE *fp,const char *format,....);从fp读入数据到内存
int fprintf(FIle *fp,const char *format,....);从内存中把数据写入fp中
(4)按数据块读写
从fp读数据块到ptr中
unsigned fread(void *ptr,unsigned size,unsigned numemb,FILE *fp);
size——每个数据块的大小
nmemb——最多允许读的数据块个数
同理还有
把ptr里的数据写道fp中
unsigned fwrite(const void *ptr,unsigned size,unsigned nmemb,FILE *fp);
返回值——实际读到的数据块个数
(5)文件定位
int fseek(FILE *fp,long offset,int fromwhere);
把fp的文件文件指针从fromwhere开始移动offset个字节,如果成功返回0,否则返回非零。
fromwhere——SEEK_CUR SEEK_END SEEK_SET
void fewind(FILE *fp)让fp指向文件首字节
long ftell(FILE *fp)返回当前文件位置指针,-1时出现错误
(6)判断文件是否结束
int feof(FILE *fp)
返回0没有到末尾
(7)无条件的把缓冲区的数据写道物理设备
int fflush(FILE *fp)