C语言文件操作

1、C语言支持两种类型的文件:文本文件和二进制文件。这两种文件的区别在于存放数据的方式不同。
         二进制文件格式:以补码形式存放。二进制文件是把数据以二进制数的格式存放在文件中的,其占用存储空间较少。 数据按其内存中的存储形式原样存放。
     文本文件:以ASCII码格式存放,一个字节存放一个字符。 文本文件的每一个字节存放一个ASCII码,代表一个字符。这便于对字符的逐个处理,但占用存储空间较多,而且要花费转换时间。
      说明:
在UNIX系统下,用缓冲文件系统来处理文本文件,
用非缓冲文件系统来处理二进制文件。
ANSI C 标准只采用缓冲文件系统来处理文本文
件和二进制文件。
C语言中对文件的读写都是用库函数来实现。
2、文件类型结构体FILE
缓冲文件系统为每个正使用的文件在内存开辟文件信息区。
文件信息用系统定义的名为FILE的结构体描述。
FILE定义在stdio.h中。
typedef struct                    
{
short     level;                 /* 缓冲区满/空程度  */
unsigned  flags;               /* 文件状态标志 */
char  fd;                          /* 文件描述符 */
unsigned char  hold;       /* 若无缓冲区不读取字符 */
short  bsize;                    /* 缓冲区大小 */
unsigned char  *buffer;  /* 数据传送缓冲区位置 */
unsigned char  *curp;    /* 当前读写位置 */
unsigned  istemp;          /* 临时文件指示 */
short  token;                  /* 用作无效检测 */
} FILE ;                         /* 结构体类型名 FILE  */
3、系统自动打开和关闭的五个标准设备文件:
文件号 文件指针 标准文件
0 stdin 标准输入(键盘)
1 stdout 标准输出(显示器)
2 stderr 标准错误(显示器)
3 stdaux 标准辅助(辅助设备端口)
4 stdprn 标准打印(打印机)
4、文件打开方式
文本文件:t可以省略不写
rt 读取
wt 写入
at 追加
rt+ 读写
wt+ 写读
at+ 读追加
二进制文件
rb
wb
ab
rb+
wb+
ab+
5、打开文件fopen
FILE *fopen(char  *filename,char *mode)
功能:按指定方式打开文件。
返值:正常打开,为指向文件结构体的指针;打开失败,为NULL。
     FILE   *fp;
     if(( fp=fopen(“c:\\test”,“rb+”))==NULL)
     {     printf(“cannot open this file\n”);
            exit(0);
     }
6、函数ftell()
原型:long ftell(FILE *fp);
作用:得知目前的文件读写指针
返回值:目前读写指针所在的位置,当然错误时返回-1
7、 文件关闭fclose
函数首部:int  fclose(FILE  *fp)
功能:关闭fp指向的文件,释放文件结构体和文件指针。
返值:正常为0;出错为非0。

fp = NULL;
8、文件读写函数
字符读写函数 : fgetc和fputc
字符输出fputc
函数原型:int  fputc(int ch, FILE *fp)
功能:把一字符ch写入fp指向的文件中。
返值:正常,返回ch;出错,为EOF。

字符输入fgetc
函数原型:int  fgetc(FILE *fp)
功能:从fp指向的文件中读取一个字符。
返值:正常,返回读取的字符;读到文件尾或出错时,为EOF。
格式化读写函数:fscanf和fprinf
函数首部:
int  fscanf(FILE  *fp, char  *format, arg_list);
int  fprintf(FILE  *fp,const char  *format, arg_list);
功能:按format格式对fp指向的文件进行I/O操作。
返值:成功,返回I/O的个数;出错或文件尾,返回EOF。
字符串读写函数:fgets和fputs
字符串输入 fgets
函数首部: 
char  *fgets(char  *str,int length,FILE  *fp);
功能:从fp所指向的文件中,至多读length-1个字符,送入字符数组str中, 如果在读入length-1个字符结束前遇换行符或                                   EOF,读入即结束,字符串读入后在最后加一个‘\0’字符。
返值:正常,返str指针;出错,返空指针NULL。

字符串输出 fputs
函数首部: int  fputs(char  *str,FILE  *fp);
功能:把str指向的字符串写入fp指向的文件。
返值:正常,返0;出错返EOF。
数据块读写函数:fread和fwrite
字段输入fread /输出fwrite
函数首部:
int  fread(void  *buffer,int num_bytes, int  count,FILE   *fp);
int  fwrite(void  *buffer,int  num_bytes, int  count,FILE   *fp);
功能:读/写数据块。
返值:成功,返回读/写的字段数;出错或文件结束,返回0。
说明:
buffer:  指向要输入/输出数据存储区的首地址的指针
num_bytes:  每个要读/写的字段的字节数
count:   要读/写的字段的个数
fp:    要读/写的文件指针
fread与fwrite 一般用于二进制文件的输入/输出。
9、文件定位函数
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值: 成功,返回0,否则返回-1。
fromwhere的值 SEEK_CURRENT(当前位置,0)、SEEK_SET(头,1)、SEEK_END(尾,2)


rewind(fp);//fp指向文件首部
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值