关于文件读写

对文件读写一直不熟,没怎么用过,近日用了一下,在网上查看了一下,在前人的基础上顺便做个总结,以加深自己的记忆,并利于以后的查询。

 

一、文件的打开:

首先要定义一个FILE *fp指针,用于指向open时返回的文件描述符,比如:

fp=open("文件名","操作方式");

文件操作方式 

“rt”      只读打开一个文本文件,只允许读数据

“wt”      只写打开或建立一个文本文件,只允许写数据

“at”      追加打开一个文本文件,并在文件末尾写数据

“rb”      只读打开一个二进制文件,只允许读数据

“wb”      只写打开或建立一个二进制文件,只允许写数据

“ab”       追加打开一个二进制文件,并在文件末尾写数据

“rt+”      读写打开一个文本文件,允许读和写

“wt+”     读写打开或建立一个文本文件,允许读写

“at+”      读写打开一个文本文件,允许读,或在文件末追加数据

“rb+”      读写打开一个二进制文件,允许读和写

“wb+”     读写打开或建立一个二进制文件,允许读和写

“ab+”      读写打开一个二进制文件,允许读,或在文件末追加数据

 

对于文件使用方式有以下几点说明:

1.文件使用方式由r,w,a,t,b+六个字符拼成,各字符的含义是:

  r(read):

  w(write):

  a(append): 追加

  t(text): 文本文件,可省略不写

  b(banary): 二进制文件

  +: 读和写

2.凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

3.用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

4.若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。

5.在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。

6FILE指针是一个结构体指针,fp=fp+12意味着fp的绝对值增加了12*sizeofFILE)。

 

       二、文件的读写操作

       文件读写分为读和写两个函数,分别为:

       Int fread(void*ptr,int size,int items,FILE *fd);

       参数分别为:数据目的地,数据元素大小,数据元素个数,文件描述符。返回值为成功读取的元素个数,若数据元素大小为1,则返回为读取的数据字节数。

       Int fwrite(void*ptr,int size,int items,FILE *fd);

       参数分别为:数据缓冲地,数据元素大小,数据元素个数,文件描述符。返回值为成功写入的元素个数,若数据元素大小为1,则返回为写入的数据字节数。

二、读写位置的确定

读写数据之前,要先确定读写数据的位置,可用fseek函数:

int fseek(FILE *fd, long offset, int fromwhere);

       fd为文件描述符,offset为偏移量,fromwhere为起始处。成功返回0,错误返回-1

其中fromwhere参数可以为:

SEEK_SET - 设定位置等于 offset 字节。

SEEK_CUR - 设定位置为当前位置加上 offset

SEEK_END - 设定位置为文件尾加上 offset

   

三、关闭文件

关闭函数为int fclose(FILE *fd);

如果流成功关闭,fclose 返回 0,否则返回EOF-1)。

 

 

关于文件夹的操作:

Opendirreaddir

Opendir用来打开一个文件夹获得文件夹指针,readdir用来读取该文件夹里边的文件内容。举例如下:

 

DIR *dir_p;

struct dirent *direntp;

struct stat StatTemp;

if((dir_p=opendir(dirname))==NULL)/读取文件夹信息

{

return 0;///no files

}

else

{

       while((direntp=readdir(dir_p))!=NULL) /读取文件,往链表中添加items

       {

              strcpy(TempName,direntp->d_name);

              NameLength=strlen(TempName);

         if(strcmp((TempName+NameLength-3),".rm")==0)

        {           

strcpy(RMFilesRoot->name,direntp->d_name);

              strcpy(PathName,dirname);

              strcat(PathName,RMFilesRoot->name);

              j=stat(PathName,&StatTemp);

              RMFilesRoot->size=StatTemp.st_size;

              。。。。。。

         }

      }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值