档案之输入与输出
C++软件本身提供了许多档案的输入与输出,以方便读者设计与档案有关的系统函数。基本上,我们可以将这些函数分成两大类。
1. 1. 有缓冲区输入与输出(Buffered I/O)
当它在读取档案数据或将数据写入档案时,一定都先经过一个缓冲区。
2. 2. 无缓冲区输入与输出(Unbuffered I/O)
所谓没有缓冲区的输入与输出,表示输入与输出的动作是直接在磁盘内,执行读取数据和写入数据动作。
有缓冲区的输入与输出函数
函数名称 | 功能说明 |
fopen( ) | 开启一个档案 |
fclose( ) | 关闭一个档案 |
putc( ) | 输出一个字符到档案 |
getc( ) | 从某一个档案读取一个字符 |
fprintf( ) | 输出数据至某档案 |
fscanf( ) | 从某档案读取数据 |
feof( ) | 测试是否到了档案结束位置 |
ferror( ) | 测试档案操作是否正常 |
fseek( ) | 设定准备读取档案数据的位置 |
rewind( ) | 将准备读取档案数据位置,设定在档案起始位置 |
remove( ) | 档案的删除 |
fopen( ) 用于开启档案,档案在使用前是需先经过开启动作的
使用格式如下:
FILE *fopen(char *filename, char *mode); |
各项数据的定义如下所示:
1. 1. *filename:档案指标,指的是欲开启的文件名称。
2. 2. *mode:档案使用模式,指的是档案被开启之后,它的使用方式。
下面是档案开启之后,一般常使用的方式:
"r" | 开启一个文字文件(text),供程序读取。 |
"w" | 开启一个文字文件(text),供程序将数据写入此档案内。如果磁盘内不包含这个档案,则系统会自行建立这个档案。如果磁盘内包含这个档案,则此档案内容会被盖过而消失。 |
"a" | 开启一个文字文件(text),供程序将数据写入此档案的末端。如果此档案不存在,则系统会自行建立此档案。
|
"rb" | 开启一个二元文件(binary),供程序读取。
|
"wb" | 开启一个二元文件,供程序将数据写入此档案内。如果磁盘内不包含这个档案,则系统会自行建立这个档案。如果磁盘内包含这个档案,此档案内容会被盖过而消失。
|
"ab" | 开启一个二元文件(binary),供程序将数据写入此档案末端,如果此档案不存在,则系统会自行建立此档案。
|
fclose( ) 用于关闭档案,如果fclose( )执行失败,它的传回值是非零值
在C语言中关闭档案主要有两个目的:
1. 1. 档案在关闭前会将档案缓冲区数据写入磁盘档案内,否则档案缓冲区数据会遗失。
2. 2. 一个C语言程序,在同一时间可开启的档案数量有限,一般是20个,如果你的程序很大,要开启超过20个档案时,你必须将暂时不用的档案关闭。
fprintf( ) 主要目的是供你将数据,以格式化方式写入某档案内
使用格式如下:
fprintf( fp , "……." , ………); |
此函数控制打印区和打印和打印变量区的使用,格式和printf( )使用格式相同. fprintf( )和printf( )两者唯一的差别是,printf( )会将数据打印在屏幕上,而fprintf( )会将数据打印在某个档案内。
#include <stdio.h>
void main() { FILE *fp; int var,i; int sum = 0; float average; fp = fopen("data1.txt","w"); /* open file pointer */
for ( i = 0; i < 5; i++ ) { printf("/1: input number %d here ==> ",i+1); scanf("%d",&var); sum += var; fprintf(fp,"%d/n",var); } average = (float) sum / 5.0; fprintf(fp,"/2: The average is %6.2f",average); fclose(fp); } |
fscanf( ) 主要的目的是让我们从某个档案读取数据
使用格式如下:
fscanf( fp , "……." , ………); |
fscanf( )函数和scanf( )函数两者之间最大的差别在,scanf( )函数主要用于从键盘输入读取数据,fscanf( )函数则是从fp档案指标所指的档案读取数据。
#include <stdio.h>
void main() { FILE *fp; int i,j,var; fp = fopen("data2.txt","r"); /* open file pointer */
for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 5; j++ ) { fscanf(fp,"%d",&var); printf("%c",var); } printf("/n"); } fclose(fp); } |
putc( ) 主要功能是将一个字符写入某档案内,
格式如下
int putc( int ch, FILE *fp ); |
此函数如果执行成功,它的传回值是ch字符值,如果执行失败,它的传回值是EOF。且上述格式中,ch代表所欲输出的字符,fp则是档案指标。
下列为一个简单建立一个档案的程序应用。
1. 1. #include <stdio.h> 2. 2. void main() 3. 3. { FILE *fp; 4. 4. char ch; 5. 5. fp = fopen("sample.txt","w"); /*开启一个文字文件(sample.txt),供程序将数据写入此档案内*/ 6. 6. printf("/1: Please input text here. /n"); 7. 7. while ( (ch = getche()) != '/r' ) putc(ch,fp); /* 将读入之字符输出所设定的sample.txt档案内*/ 8. 8. 9. 9. fclose(fp); /*关闭指标为fp之档案 */ 10. 10. } |
getc( ) 主要目的是某一个档案中,读取一个字符。,
使用格式如下:
int getc(FILE *fp); |
当执行getc( )函数成功时,传回值是所读取的字符,如果所读取的是档案结束字符,则此值是EOF,在stdio.h内,此值是 -1。