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指向文件首部
二进制文件格式:以补码形式存放。二进制文件是把数据以二进制数的格式存放在文件中的,其占用存储空间较少。 数据按其内存中的存储形式原样存放。
文本文件:以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指向文件首部