现在的位置: 首页 > 综合 > 正文

文件操作

2018年05月25日 ⁄ 综合 ⁄ 共 2665字 ⁄ 字号 评论关闭
计算机中文件操作采用的是流的概念
文件格式:数据在文件中都是以二进制形式存储的。数据必须按照存入的类型读出才能恢复其本来面貌。很多文件都有标准的格式比如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)
 

抱歉!评论已关闭.