c 文件

概念表明文件指针的相似格局为: FILE* 指针变量标识符;

·fputc函数的效劳为向钦定的文件中写入3个字符,函数调用的款型为:
    fputc(字符量,文件指量或变量),
    例如:
    fputc(‘a’,fp);
    其意putc函数的行使也要验证几点:
    1)
被写入的文本可以用写、读写、追加格局打开,用写或读写方式写入字符从文件首上马。如需保留原有文件内容,希望写入的字符被写入的文本若不设有,则成立该公文。
    2) 每写入1个字符,文件之中地点指针向后移动贰个字节。
    3)
fputc函数有一个重临值,如写入成功则赶回写入的字符,否则再次回到叁个EOF。可用此来判断写符,写入2个文件,再把该公文内容读出突显在显示屏上。

  1. 每写入二个字符,文件之中地点指针向后移动二个字节。

  2. fputc函数有3个再次回到值,如写入成功则赶回写入的字符,
    否则赶回3个EOF。可用此来判定写入是或不是中标。

5.
在开辟3个文书时,倘若出错,fopen将赶回1个空指针值NULL。在先后中得以用这一消息来识别是还是不是到位打开文件的工作,并作相应的处理。因而常用以下程序段打开文件:
if((fp=fopen(“c:\\hzk16″,”rb”)==NULL)
{
printf(“\nerror on open c:\\hzk16 file!”);
getch();
exit(1);
}
  那段程序的意义是,倘使回去的指针为空,表示不可以打开C盘根目录下的hzk16文本,则交给提醒消息“error
on open c:\
hzk16file!”,下一行getch()的效率是从键盘输入贰个字符,但不在显示器上出示。在此地,该行的功效是等待,唯有当用户从键盘敲任一键时,程序才继续执行,
因而用户可选用这么些等待时间阅读出错提醒。敲键后执行exit(1)退出程序。

下边介绍流式文件的打开、关闭、读、写、 定位等各类操作。

贰 、文件的读写
对文件的读和写是最常用的文书操作。在C语言中提供了各样文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
下边分别授予介绍。使用上述函数都须求包括头文件stdio.h。

  fseek函数用来运动文件之中地方指针,其调用格局为:
fseek(文件指针,位移量,发轫点); 其中:“文件指针”指向被移位的公文。
“位移量”表示移动的字节数,要求位移量是long型数据,以便在文书长度超越64KB
时不会出错。当用常量表示位移量时,须要加后缀“L”。“起初点”表示从哪儿开头估算位移量,规定的起初点有三种:文件首,当前地方和文件尾。
其象征方法如表10.2。
开端点    表示符号    数字代表
──────────────────────────
文件首    SEEK—SET    0
当前地方   SEEK—CU中华V    1
文本末尾   SEEK—END     2
例如:
fseek(fp,100L,0);其含义是把地点指针移到离文件首九十七个字节处。还要阐明的是fseek函数一般用来二进制文件。在文件文件中由于要拓展转移,故往往总结的地点会冒出错误。文件的私下读写在运动地方指针之后,
即可用前边介绍的任一种读写函数进行读写。由于一般是读写一个数额据块,由此常用fread和fwrite函数。上面用例题来验证文件的任意读写。

多少块读写函数fread和fwrite

文本一旦选拔完成,应用关闭文件函数把文件关闭,
以幸免文件的数目丢失等张冠李戴。

·fscanf(文件指针,格式字符串,输入表列);

  1. 把2个文本文件读入内存时,要将ASCII码转换来二进制码,
    而把公文以文件格局写入磁盘时,也要把二进制码转换来ASCII码,因而文本文件的读写要开支较多的转换时间。对二进制文件的读写不设有那种转移。

  2. 正规输入文件(键盘),标准输出文件(显示器),标准出错输出(出错新闻)是由系统打开的,可向来接纳。文件关闭函数fclose文件一旦接纳落成,应用关闭文件函数把文件关闭,
    以幸免文件的数码丢失等不当。

#include<stdio.h>
main()
{
    FILE *fp;
    char ch,st[20];
    if((fp=fopen("string","at+"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    printf("input a string:\n");
    scanf("%s",st);
    fputs(st,fp);
    rewind(fp);
    ch=fgetc(fp);
    while(ch!=EOF)
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    printf("\n");
    fclose(fp);
}

C语言文件操作(2)

(3)数据块读写函数:fread和fwrite

中判断

本例程序定义了二个协会stu,表明了五个结构数组boya和
boyb以及八个社团指针变量pp和qq。pp指向boya,qq指向boyb。程序第26行以读写形式打开二进制文件“stu_list”,输入三个学生数量将来,写入该公文中,
然后把公文之中地方指针移到文件首,读出两块学生数量后,在显示器上显得。

·字符串读写函数:fgets和fputs


  1. 在fgetc函数调用中,读取的公文必须是以读或读写情势打开的。

  对fgets函数有两点表达:

#include<stdio.h>
main()
{
FILE *fp;
char str[11];
if((fp=fopen("c:\\study\\string.txt","rt"))==NULL)
{
printf("Cannot open file strike any keyexit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("%s",str);
fclose(fp);
}

·fprintf(文件指针,格式字符串,输出表列);

  对于fgetc函数的接纳有以下几点表达:

 

fgetc函数的效应是从指定的文件中读3个字符,函数调用的款型为:
字符变量=fgetc(文件指针);
例如:ch=fgetc(fp);其意思是从打开的文本fp中读取四个字符并送入ch中。

·fputs函数的成效是向钦定的文本写入三个字符串,其调用方式为:
    fputs(字符串,文件指针)
其中字符串可以是字符串常量,也得以是字符数组名 或 指针变量,
    例如:
    fputs(“abcd“,fp);其含义是把字符串“abcd”写入fp所指的文件之中。

C语言中常用的公文检测函数有以下多少个。
一 、文件截至检测函数feof函数调用格式: feof(文件指针);
意义:判断文件是还是不是处于文件甘休地点,如文件截至,则再次来到值为1,否则为0。

贰 、写字符串函数fputs

e.
在开辟3个文书时,借使出错,fopen将回来三个空指针值NULL。

二进制文件以及文本文件都足以当做是“数据流”。

格式化读写函数fscanf和fprintf

 

1.
被写入的文本能够用写、读写以及伸张格局打开,用写或读写格局打开二个已存在的文书时将免除原有的文书内容,写入字符从

·fgets函数的意义是从指定的文书中读多少个字符串到字符数组中,函数调用的款型为:
    fgets(字符数组名,n,文件指针);
    其中的n是贰个正整数。表示从文件中读出的字符串不超过n-3个字符。在读入的最后三个字符后增加串截至标志’\0’。
   
例如:fgets(str,n,fp);的意思是从fp所指的文本中读出n-三个字符送入字符数组str中。
    对fgets函数有两点表达:
  1). 在读出n-3个字符之前,如遇上了换行符或EOF,则读出了事。
  2). fgets函数也有重回值,其再次回到值是字符数组的首地址。

  对fgets函数有两点表达:

  普通文书是指驻留在磁盘或其余表面介质上的三个逐步数据集,可以是源文件、目的文件、可执行程序;
也足以是一组待输入处理的固有数据,大概是一组输出的结果。对于源文件、目标文件、可执行程序可以称呼程序文件,对输入输出数据可称作数据文件。

所谓打开文件,实际上是创立文件的种种有关音讯,
并使文件指针指向该文件,以便进行其余操作。

对此文本使用方法有以下几点表明:
1) 文件使用方法由r,w,a,t,b,+四个字符拼成,各字符的意思是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2) 凡用“r”打开3个文件时,该文件必须已经存在,且不得不从该公文读出。
3)
用“w”打开的公文只好向该文件写入。若打开的文书不设有,则以内定的文书名创建该文件,若打开的文本已经存在,则将该公文删去,重建三个新文件。
4)
若要向2个已存在的文件伸张新的音讯,只能够用“a”格局打开文件。但此时该文件必须是存在的,否则将会出错。
5)
在开辟3个文件时,假使出错,fopen将再次回到3个空指针值NULL。在先后中得以用这一消息来鉴别是不是做到打开文件的工作,并作相应的处理。

  二进制文件是按二进制的编码格局来存放文件的。 例如,
数5678的存储情势为: 00010110001011十头占三个字节。二进制文件就算也可在屏幕上突显,
但其故事情节无法读懂。C系统在拍卖那一个文件时,并不区分系列,都看成是字符流,按字节举行处理。
输入输出字符流的早先和了结只由程序控制而不受物理符号(如回车符)的操纵。
因而也把这种文件称作“流式文件”。

第二个:详细的,如下:

·格式化读写函数:fscanf和fprinf

·读数据块函数fread调用的相似方式为: fread(buffer,size,count,fp);

对此文本使用办法有以下几点表明:

C++文件操作(转)

a.
文件使用方法由r,w,a,t,b,+八个字符拼成,各字符的意思是:

 

文本的肆意读写

对此文本使用方式有以下几点表明:

在C语言中提供了多样文本读写的函数:

【示例程序】
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1024
main()
{
    FILE *fpr = fopen(“1.txt”,”r”);
    FILE *fpw = fopen(“2.txt”,”a+”);
    char *arrayCh = NULL;
    char ch;
    if(NULL == fpr){
        printf(“1.txt open failed!\n”);
        exit(1);
    }
    if(NULL == fpw){
        printf(“2.txt open failed!\n”);
        exit(1);
    }
    printf(“Both file open successd!\n”);
    while((ch = fgetc(fpr)) != EOF){
        fputc(ch,fpw);
    }
    while((ch = fgetc(fpw)) != EOF){
        printf(“%c”,ch);
    }
    fclose(fpw);
    fclose(fpr);
    exit(0);
}

② 、写字符函数fputc

//[例10.1]读入文件e10-1.c,在屏幕上输出。
#include<stdio.h>
    main()
{
    FILE *fp;
    char ch;
    if((fp=fopen("e10_1.c","rt"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    ch=fgetc(fp);
    while (ch!=EOF)
    {
        putchar(ch);
        ch=fgetc(fp);
    }
    fclose(fp);
}

b.
凡用“r”打开一个文本时,该文件必须已经存在,
且只好从该公文读出。否则报错。

(2) 字符串读写函数:fgets和fputs

数量块读写函数fread和fwrite

  1. 每写入二个字符,文件之中位置指针向后活动一个字节。

  2. fputc函数有3个再次来到值,如写入成功则赶回写入的字符,
    否则赶回2个EOF。可用此来判断写入是还是不是中标。

    //[例10.2]从键盘输入一行字符,写入1个文件, 再把该公文内容读出展现在显示屏上。
    #include

     main()
    

    {

     FILE *fp;
     char ch;
     if((fp=fopen("string","wt+"))==NULL)
     {
         printf("Cannot open file strike any key exit!");
         getch();
         exit(1);
     }
     printf("input a string:\n");
     ch=getchar();
     while (ch!='\n')
     {
         fputc(ch,fp);
         ch=getchar();
     }
     rewind(fp);
     ch=fgetc(fp);
     while(ch!=EOF)
     {
         putchar(ch);
         ch=fgetc(fp);
     }
     printf("\n");
     fclose(fp);
    

    }

(1)文件打开函数fopen

例如:
  fscanf(fp,”%d%s”,&i,s);
  fprintf(fp,”%d%c”,j,ch);

调用的貌似方式是: fclose(文件指针); 例如:
fclose(fp);
平常完结关闭文件操作时,fclose函数再次来到值为0。如再次来到非零值则代表有荒唐发生。文件的读写对文本的读和写是最常用的文本操作。

[例10.7]
#include<stdio.h>
struct stu
{
    char name[10];
    int num;
    int age;
    char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
    FILE *fp;
    char ch;
    int i;
    pp=boya;
    qq=boyb;
    if((fp=fopen("stu_list","wb+"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    printf("\ninput data\n");
    for(i=0;i<2;i++,pp++)
        scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
    pp=boya;
    for(i=0;i<2;i++,pp++)
        fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->
        addr);
    rewind(fp);
    for(i=0;i<2;i++,qq++)
        fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);
    printf("\n\nname\tnumber age addr\n");
    qq=boyb;
    for(i=0;i<2;i++,qq++)
        printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,
        qq->addr);
    fclose(fp);
}

    可用DOS命令type显示OK的情节:例如一个先后的main()函数尾部形如int
main(int argc, char
*argv[]),编译链接后生成的可执行文件名为a.exe,那么请留心上边的调用:
a.exe abc def
在上面的一声令下行中,a.exe是要运维的先后名称,后边的abc和def就是流传程序的几个参数,那多少个参数就通过argc和argv传入程序,注意那些参数都以字符串。通过地方的调用,在这一个程序中,argc=3,a.exe是第②个参数,这么些字符串将保存在argv[0]中,abc和def分别是第贰和第一个参数,它们分别被保存在argv[1]和argv[2]中。  

(1)字符读写函数 :fgetc和fputc

fclose函数

fscanf函数,fprintf函数与后边使用的scanf和printf
函数的功力相似,都是格式化读写函数。 两者的区分在于 fscanf
函数和fprintf函数的读写对象不是键盘和屏幕,而是磁盘文件。那三个函数的调用格式为:
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列); 例如:
fscanf(fp,”%d%s”,&i,s);
fprintf(fp,”%d%c”,j,ch);
用fscanf和fprintf函数也得以成功例10.6的标题。修改后的程序如例10.7所示。

三.文书操作:

一 、文件的开辟与关闭

  在C语言中,文件操作都以由库函数来达成的。
在本章内将介绍紧要的文本操作函数。

  1. 在读出n-叁个字符此前,如遇上了换行符或EOF,则读出扫尾。
  2. fgets函数也有重回值,其再次回到值是字符数组的首地址。

f.
把三个文件文件读入内存时,要将ASCII码转换到二进制码,
而把文件以文件方式写入磁盘时,也要把二进制码转换到ASCII码,由此文本文件的读写要开支较多的更换时间。对二进制文件的读写不设有那种转移。

运用文件的方法共有12种,上面给出了它们的号子和含义。
“r”
只读打开二个文书文件,只允许读数据
“w”
只写打开或树立贰个文书文件,只同意写多少
“a”
充实打开3个文书文件,并在文件末尾写多少
“rb”
只读打开三个二进制文件,只允许读数据
“wb”
只写打开或确立一个二进制文件,只同意写多少
“ab”
充实打开1个二进制文件,并在文件末尾写多少
“r+”
读写打开二个文书文件,允许读和写
“w+”
读写打开或确立三个文件文件,允许读写
“a+”
读写打开一个文件文件,允许读,或在文书末增加数据
“rb+”
读写打开三个二进制文件,允许读和写
“wb+”
读写打开或建立二个二进制文件,允许读和写
“ab+”
读写打开三个二进制文件,允许读,或在文书末扩展数据

  ASCII文件也称之为文本文件,那种文件在磁盘中存放时每一种字符对应二个字节,用于存放对应的ASCII码。例如,数5678的仓储格局为:
ASC码:  00110101 00110110 00110111 00111000
     ↓     ↓    ↓    ↓
十进制码: 5     6    7    8
共占用四个字节。ASCII码文件可在显示器上按字符彰显,
例如源程序文件就是ASCII文件,用DOS命令TYPE可突显文件的始末。
由于是按字符突显,因而能读懂文件内容。

//[例10.4]从e10_1.c文件中读入一个含10个字符的字符串。
#include<stdio.h>
    main()
{
    FILE *fp;
    char str[11];
    if((fp=fopen("e10_1.c","rt"))==NULL)
    {
        printf("Cannot open file strike any key exit!");
        getch();
        exit(1);
    }
    fgets(str,11,fp);
    printf("%s",str);
    fclose(fp);
}

里面FILE应为大写,它事实上是由系统定义的三个数据结构, 该协会中包括文件名、文件状态和文书当前岗位等新闻。
在编写源程序时不必关心FILE结构的底细。例如:FILE *fp;
表示fp是指向FILE结构的指针变量,通过fp
即可找存放有些文件新闻的构造变量,然后按结构变量提供的音信找到该公文,
实施对文本的操作。习惯上也含糊地把fp称为指向2个文件的指针。

fopen函数用来开辟3个文书,其调用的相似格局为:
文本指针名=fopen(文件名,使用文件措施);
其中:
“文件指针名”必须是被验证为FILE 类型的指针变量;
“文件名”是被打开文件的文书名;
“使用文件方式”是指文件的门类和操作必要。
“文件名”是字符串常量或字符串数组。

6.
文件可按字节,字符串,数据块为单位读写,文件也可按内定的格式举办读写。

 

二进制文件是按二进制的编码情势来存放在文件的。 例如, 数5678的存储格局为:
00010110 001011十四头占3个字节。二进制文件纵然也可在显示器上出示,
但其内容不大概读懂。C系统在拍卖那个文件时,并不区分连串,都看作是字符流,按字节进行拍卖。
输入输出字符流的始发和得了只由程序控制而不受物理符号(如回车符)的支配。
因而也把那种文件称作“流式文件”。

   
其中buffer是三个指针,在fread函数中,它意味着存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。
size 代表数据块的字节数。count 代表要读写的数据块块数。fp 表示文件指针。

  fopen函数用来打开三个文书,其调用的相似方式为:
文件指针名=fopen(文件名,使用文件格局)
其中,“文件指针名”必须是被验证为FILE
类型的指针变量,“文件名”是被打开文件的文件名。
“使用文件方式”是指文件的系列和操作须要。“文件名”是字符串常量或字符串数组。例如:
FILE *fp;
fp=(“file a”,”r”);
其含义是在当前目录下开辟文件file a,
只同意开展“读”操作,并使fp指向该文件。
又如:
FILE *fphzk
fphzk=(“c:\\hzk16′,”rb”)
其意思是打开C驱动器磁盘的根目录下的文书hzk16,
那是二个二进制文件,只允许按二进制格局开展读操作。多个反斜线“\\
”中的第3个代表转义字符,第一个代表根目录。使用文件的法子共有12种,下边给出了它们的符号和含义。
文本使用办法        意 义
“rt”      只读打开一个文书文件,只同意读数据
“wt”      只写打开或创建1个文本文件,只允许写多少
“at”      追加打开三个文本文件,并在文件末尾写多少
“rb”      只读打开叁个二进制文件,只允许读数据
“wb”       只写打开或建立二个二进制文件,只同意写多少
“ab”       追加打开1个二进制文件,并在文件末尾写多少
“rt+”      读写打开2个文本文件,允许读和写
“wt+”      读写打开或建立二个文件文件,允许读写
“at+”      读写打开八个文件文件,允许读,或在文件末追加数 据
“rb+”      读写打开2个二进制文件,允许读和写
“wb+”      读写打开或确立二个二进制文件,允许读和写
“ab+”      读写打开三个二进制文件,允许读,或在文书末扩充数据

  fputc函数的效能是把二个字符写入内定的文书中,函数调用的款式为:
fputc(字符量,文件指针);
其中,待写入的字符量可以是字符常量或变量,例如:fputc(‘a’,fp);其意义是把字符a写入fp所指向的文书中。

g. 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可一贯采纳。

【程序示例】
#include<stdio.h>
#include<stdlib.h>
main()
{
    char str[11];
    FILE *fpr = fopen(“1.txt”,”r”);  
    FILE *fpw = fopen(“2.txt”,”a+”);
    if(NULL == fpr){
        printf(“1.txt open failed!\n”);
        exit(1);
    }
    if(NULL == fpw){
        printf(“2.txt open failed!\n”);
        exit(1);
    }
    printf(“file open successed!\n”);
    fgets(str,11,fpr);
    printf(“%s\n”,str);
    fputs(str,fpw);
    fclose(fpr);
    fclose(fpw);
    exit(0);
}

[例10.8]在学生文件stu list中读出第2个学生的数目。
#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boy,*qq;
main()
{
FILE *fp;
char ch;
int i=1;
qq=&boy;
if((fp=fopen(“stu_list”,”rb”))==NULL)
{
printf(“Cannot open file strike any key exit!”);
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(qq,sizeof(struct stu),1,fp);
printf(“\n\nname\tnumber age addr\n”);
printf(“%s\t%5d %7d %s\n”,qq->name,qq->num,qq->age,
qq->addr);
}
  文件stu_list已由例10.6的次序建立,本程序用随机读出的不二法门读出第一个学生的数量。程序中定义boy为stu类型变量,qq为指向boy的指针。以读二进制文件方式打开文件,程序第12行移动文件地点指针。其中的i值为1,表示从文件头开头,移动三个stu类型的长短,
然后再读出的多寡即为第三个学生的数据。

  1. 在fgetc函数调用中,读取的文书必须是以读或读写情势打开的。

2.文本操作函数:

流文件的风味是,处理时不需考虑文件中的数据的质量、类型和存放格式。访问时只是以字节为单位对数据举行存取,没有记录的定义,而将对数据结构的辨析、处理等工作都付出后续程序区处理。系统会自动为那在采纳的每一种文件开辟二个缓存区,从内存向磁盘输出数据必须先送到内存中的缓存区,装满缓存后才联合送到磁盘。

3.
在文件之中有多个义务指针。用来针对文件的眼下读写字节。在文件打开时,该指针总是指向文件的首先个字节。使用fgetc
函数后, 该岗位指针将向后运动一个字节。
因而可连日来数次用到fgetc函数,读取五个字符。
应注意文件指针和文件之中的地方指针不是3遍事。文件指针是指向全部文件的,须在程序中定义表明,只要不另行赋值,文件指针的值是不变的。文件之中的职位指针用以提醒文件之中的此时此刻读写地方,每读写一次,该指针均向后运动,它不需在先后中定义表达,而是由系统自动安装的。

  在C语言中,文件操作都以由库函数来形成的。
在本章内将介绍紧要的公文操作函数。

·字符串读写函数:fgets和fputs

那七个函数的调用格式为: 

本章小结

文件
文件的基本概念
  所谓“文件”是指一组有关数据的平稳聚集。
这么些数额集有三个名号,叫做文件名。
实际上在前头的各章中大家早就多次运用了文件,例如源程序文件、目的文件、可执行文件、库文件
(头文件)等。文件一般是驻留在外部介质(如磁盘等)上的,
在接纳时才调入内存中来。从分歧的角度可对文件作差其余归类。从用户的角度看,文件可分为普通文书和设施文件二种。

#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any keyexit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
for(i=0;i<2;i++,pp++)
fprintf(fp,"%s %d %d%s\n",pp->name,pp->num,pp->age,pp->addr);
rewind(fp);
for(i=0;i<2;i++,qq++)
fscanf(fp,"%s %d %d%s\\n",qq->name,&qq->num,&qq->age,qq->addr);
printf("\nname\tnumber age addr\n");
qq=boyb;
for(i=0;i<2;i++,qq++)
printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}

C语言还提供了用来整块数据的读写函数。
可用来读写一组数据,如3个数组元素,1个构造变量的值等。

  上边分别赋予介绍。使用上述函数都须要涵盖头文件stdio.h。字符读写函数fgetc和fputc字符读写函数是以字符(字节)为单位的读写函数。
每一遍可从文件读出或向文件写入二个字符。

  对于fputc函数的应用也要证实几点:
1.
被写入的文本能够用、写、读写,追加情势打开,用写或读写格局打开一个已存在的文书时将免除原有的文书内容,写入字符从文件首从头。如需保存原有文件内容,希望写入的字符以文件末先导存放,必须以增加形式打开文件。被写入的文本若不存在,则开创该公文。

  
普通文书是指驻留在磁盘或其余表面介质上的三个不变数据集,可以是源文件、目的文件、可执行程序;也足以是一组待输入处理的原本数据,大概是一组输出的结果。对于源文件、目的文件、可执行程序可以称呼程序文件,对输入输出数据可称作数据文件。

【程序示例】
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 2
struct stu{
    char name[20];
    int age;
    char addr[20];
}boy[MAXSIZE];
main()
{
    FILE *fp = fopen(“2.txt”,”w+”);
    struct stu rboy[MAXSIZE];
    int i;
    int temp = 0;
    if(NULL == fp){
        printf(“2.txt open failed!\n”);
        exit(1);
    }
    printf(“File open successed!\n”);
    printf(“input data: “);
    for(i = 0;i < MAXSIZE;i++){
        scanf(“%s%d%s”,boy[i].name,&boy[i].age,boy[i].addr);
    }
    for(i = 0;i < MAXSIZE;i++){
        printf(“%s  %d 
%s\n”,boy[i].name,boy[i].age,boy[i].addr);
    }
    fwrite(boy,sizeof(struct stu),MAXSIZE,fp);
    rewind(fp);
    fread(rboy,sizeof(struct stu),MAXSIZE,fp);
    for(i = 0;i < MAXSIZE;i++){
        printf(“name:%s  age:%d 
addr:%s\n”,rboy[i].name,rboy[i].age,rboy[i].addr);
    }
    fclose(fp);
    exit(0);
}

文件检测函数

本程序为带参的main函数。程序中定义了四个文件指针 fp1
和fp2,分别指向命令行参数中付出的文书。如命令行参数中绝非付诸文件名,则交由指示音讯。程序第38行代表假使只交给三个文书名,则使fp2指向专业输出文件(即显示屏)。程序第贰5行至28行用循环语句各种读出文件1中的字符再送到文件2中。再次运行时,给出了一个文书名(由例10.2所建立的文书),
故输出给专业输出文件stdout,即在屏幕上突显文件内容。第二回运转,给出了三个公文名,因而把string中的内容读出,写入到OK之中。可用DOS命令type突显OK的情节:字符串读写函数fgets和fputs

 

【示例程序】
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 2
struct stu{
    char name[20];
    int age;
    char addr[20];
}boy[MAXSIZE];
main()
{  
    FILE *fp = fopen(“2.txt”,”w+”);
    struct stu rboy[MAXSIZE];
    int i;
    if(NULL == fp){
        printf(“2.txt open failed!\n”);
        exit(1);
    }
    printf(“enter data:\n”);
    for(i = 0;i < MAXSIZE;i++){
        scanf(“%s%d%s”,boy[i].name,&boy[i].age,boy[i].addr);
    }
    for(i = 0;i < MAXSIZE;i++){
        fprintf(fp,”%s %d
%s\n”,boy[i].name,boy[i].age,boy[i].addr);
    }
    for(i = i;i < MAXSIZE;i++){
       
fscanf(fp,”%s%d%s”,rboy[i].name,&rboy[i].age,rboy[i].addr);
    }
    fclose(fp);
    exit(0);
}

长度符的

  从文件编码的点子来看,文件可分为ASCII码文件和二进制码文件三种。

  
设备文件是指与主机相联的各类外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也作为是2个文书来拓展保管,把它们的输入、输出等同于对磁盘文件的读和写。经常把屏幕定义为专业输出文件,
一般意况下在显示屏上出示有关音讯就是向专业输出文件输出。如平常使用的printf,putchar函数就是这类输出。键盘平日被钦命专业的输入文件,从键盘上输入就代表从标准输入文件上输入数据,scanf,getchar函数就属于那类输入。

·写多少块函数fwrite调用的相似格局为: fwrite(buffer,size,count,fp);

[例10.2]从键盘输入一行字符,写入三个文书,
再把该公文内容读出显示在显示屏上。
#include<stdio.h>
main()
{
FILE *fp;
char ch;
if((fp=fopen(“string”,”wt+”))==NULL)
{
printf(“Cannot open file strike any key exit!”);
getch();
exit(1);
}
printf(“input a string:\n”);
ch=getchar();
while (ch!=’\n’)
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf(“\n”);
fclose(fp);
}
  程序中第4行以读写文本文件措施打开文件string。程序第23行从键盘读入八个字符后跻身循环,当读入字符不为回车符时,
则把该字符写入文件之中,然后继续从键盘读入下一字符。
每输入两个字符,文件之中地方指针向后活动三个字节。写入落成,
该指针已针对文件末。如要把文件先河读出,须把指针移向文件头,
程序第壹9行rewind函数用于把fp所指文件的里边地方指针移到文件头。
第③0至25行用于读出文件中的一行内容。

3.
在文书之中有2个岗位指针。用来针对文件的眼下读写字节。在文书打开时,该指针总是指向文件的第二个字节。使用fgetc
函数后, 该地方指针将向后运动1个字节。
因此可总是数十次用到fgetc函数,读取多少个字符。
应注意文件指针和文件之中的职位指针不是2回事。文件指针是指向一切文件的,须在程序中定义表达,只要不另行赋值,文件指针的值是不变的。文件之中的职位指针用以指示文件之中的此时此刻读写地点,每读写二回,该指针均向后移动,它不需在程序中定义表明,而是由系统活动安装的。

3.
在文书之中有3个岗位指针。用来针对文件的眼下读写字节。在文书打开时,该指针总是指向文件的第三个字节。使用fgetc
函数后, 该地方指针将向后运动二个字节。
由此可总是数次施用fgetc函数,读取四个字符。
应注意文件指针和文书之中的职位指针不是1次事。文件指针是指向一切文件的,须在先后中定义表达,只要不重复赋值,文件指针的值是不变的。文件之中的职分指针用以提示文件之中的脚下读写地点,每读写三遍,该指针均向后移动,它不需在程序中定义表明,而是由系统活动安装的。

  
文件在进行读写操作在此以前要先打开,使用完成要关门。所谓打开文件,实际上是身无寸铁文件的种种关于音讯,并使文件指针指向该公文,以便进行其余操作。关闭文件则断开指针与公事之间的联系,也就不准再对该文件举办操作。

C系统提供了充足的系统文件,称为库文件,C的库文件分为两类,一类是增加名为”.h”的文书,称为头文件,
在面前的涵盖命令中大家已反复运用过。在”.h”文件中蕴涵了常量定义、
类型定义、宏定义、函数原型以及种种编译选用安装等新闻。另一类是函数库,包涵了各个函数的目的代码,供用户在程序中调用。
寻常在先后中调用二个库函数时,要在调用此前包蕴该函数原型所在的”.h”
文件。
在附录中付出了全体库函数。
ALLOC.H    表达内存管理函数(分配、释放等)。
ASSERT.H    定义 assert调试宏。
BIOS.H     表达调用IBM—PC ROM BIOS子程序的顺序函数。
CONIO.H    表达调用DOS控制台I/O子程序的一一函数。
CTYPE.H    包括关于字符分类及转换的名类音信(如
is阿尔法和toascii等)。
DIPRADO.H     包罗关于目录和路线的构造、宏定义和函数。
DOS.H     定义和阐明MSDOS和8086调用的有个别常量和函数。
EOdysseyRON.H    定义错误代码的助记符。
FCNTL.H    定义在与open库子程序连接时的标志常量。
FLOAT.H    包蕴关于浮点运算的有些参数和函数。
GRAPHICS.H  
表达有关图形成效的一一函数,图形错误代码的常量定义,正对两样驱动程序的各类颜色值,及函数用到的部分与众分裂结构。
IO.H      包蕴低级I/O子程序的布局和阐明。
LIMIT.H    包罗各环境参数、编译时间限定、数的限量等新闻。
MATH.H     表达数学运算函数,还定了 HUGE VAL 宏,
表达了matherr和matherr子程序用到的独特结构。
MEM.H     表达部分内存操作函数(其中领先五成也在ST昂科威ING.H 中表明)。
PROCESS.H   表达经过管理的逐一函数,spawn…和EXEC …函数的构造表达。
SETJMP.H    定义longjmp和setjmp函数用到的jmp buf类型,
表达那五个函数。
SHARE.H    定义文件共享函数的参数。
SIGNAL.H    定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z]
[ZZ)]DFL常量,表达rajse和signal八个函数。
STDALacrosseG.H    定义读函数参数表的宏。(如vprintf,vscarf函数)。
STDDEF.H    定义一些公共数据类型和宏。
STDIO.H    定义Kernighan和Ritchie在Unix System V
中定义的标准和增加的门类和宏。还定义标准I/O
预约义流:stdin,stdout和stderr,表明 I/O流子程序。
STDLIB.H    表明部分常用的子程序:转换子程序、搜索/ 排序子程序等。
ST中华VING.H    表明某些串操作和内存操作函数。
SYS\STAT.H   定义在开拓和开创文件时用到的一部分标志常量。
SYS\TYPES.H  说明ftime函数和timeb结构。
SYS\TIME.H   定义时间的品类time[ZZ(Z] [ZZ)]t。
TIME.H    
定义时间转换子程序asctime、localtime和gmtime的结构,ctime、 difftime、
gmtime、 localtime和stime用到的花色,并提供那几个函数的原型。
VALUE.H    定义一些重视常量, 包蕴借助于机器硬件的和为与Unix System
V相同盟而表明的片段常量,包蕴浮点和双精度值的范围。

  对于fgetc函数的使用有以下几点表达:

对文件的读和写是最常用的公文操作。

(4)格式化读写函数:fscanf和fprinf

5.
在开辟3个文书时,假诺出错,fopen将回到一个空指针值NULL。在先后中得以用这一消息来甄别是不是形成打开文件的做事,并作相应的拍卖。由此常用以下程序段打开文件:
if((fp=fopen(“c:\\hzk16″,”rb”)==NULL)
{
printf(“\nerror on open c:\\hzk16 file!”);
getch();
exit(1);
}
  那段程序的意思是,如果回到的指针为空,表示不大概开拓C盘根目录下的hzk16文件,则交由指示音信“error
on open c:\
hzk16file!”,下一行getch()的成效是从键盘输入一个字符,但不在显示器上显示。在那里,该行的作用是等待,
只有当用户从键盘敲任一键时,程序才继续执行,
由此用户可利用这几个等待时间阅读出错指示。敲键后执行exit(1)退出程序。

 

文本在展开读写操作此前要先开辟,使用完结要关张。

·fgetc函数的功能是从内定的文书中读3个字符,函数调用的款式为:
    字符变量=fgetc(文件指针);
    对于fgetc函数的拔取有以下几点表达:
    1) 在fgetc函数调用中,读取的公文必须是以读或读写格局打开的。
    2) 读取字符的结果也得以不向字符变量赋值, 例如: fgetc(fp);
但是读出的字符不可以保留。
    3)
在文件之中有八个岗位指针。用来针对文件的日前读写字节。在文件打开时,该指针总是指向文件的首先个字节。使用fgetc
函数后,该岗位指针将向后活动3个字节。因而可连日来数次使用fgetc函数,读取八个字符。应小心文件指针和文书之中的岗位指针不是一回事。文件指针是指向整个文件的,须在程序中定义表达,只要不重复赋值,文件指针的值是不变的。文件之中的岗位指针用以指示文件之中的日前读写地方,每读写一次,该指针均向后活动,它不需在先后中定义表达,而是由系统自动安装的。

数据类型

  设备文件是指与主机相联的各个外部设备,如屏幕、打印机、键盘等。在操作系统中,把外部设备也视作是二个文件来开展保管,把它们的输入、输出等同于对磁盘文件的读和写。日常把显示屏定义为标准输出文件,
一般意况下在显示屏上突显有关音讯就是向专业输出文件输出。如前方平时利用的printf,putchar
函数就是那类输出。键盘平常被指定专业的输入文件,
从键盘上输入就表示从标准输入文件上输入数据。scanf,getchar函数就属于那类输入。

C语言文件操作

fscanf函数,fprintf函数与scanf和printf
函数的效果相似,都以格式化读写函数。 两者的界别在于 fscanf
函数和fprintf函数的读写对象不是键盘和显示屏,而是磁盘文件。

① 、读字符函数fgetc

  fopen函数用来开辟多少个文书,其调用的形似格局为:文件指针名=fopen(文件名,使用文件措施)
其中,“文件指针名”必须是被注明为FILE
类型的指针变量,“文件名”是被打开文件的文书名。
“使用文件措施”是指文件的项目和操作须要。“文件名”是字符串常量或字符串数组。例如:
FILE *fp;
fp=(“file a”,”r”);
其意思是在当前目录下打开文件file
a,只同意开展“读”操作,并使fp指向该文件。
又如:
FILE *fphzk
fphzk=(“c:\\hzk16′,”rb”)
其意思是打开C驱动器磁盘的根目录下的公文hzk16,
那是一个二进制文件,只允许按二进制形式开展读操作。五个反斜线“\\
”中的第3个象征转义字符,第二个象征根目录。使用文件的法子共有12种,上面给出了它们的标记和意义。
文本使用办法        意 义
“rt”      只读打开3个文本文件,只同意读数据
“wt”      只写打开或建立五个文本文件,只同意写多少
“at”      追加打开3个文件文件,并在文件末尾写多少
“rb”      只读打开1个二进制文件,只同意读数据
“wb”       只写打开或树立一个二进制文件,只同意写多少
“ab”       追加打开叁个二进制文件,并在文件末尾写多少
“rt+”      读写打开二个文书文件,允许读和写
“wt+”      读写打开或建立一个文书文件,允许读写
“at+”      读写打开贰个文本文件,允许读,或在文书末追加数 据
“rb+”      读写打开1个二进制文件,允许读和写
“wb+”      读写打开或确立多个二进制文件,允许读和写
“ab+”      读写打开3个二进制文件,允许读,或在文书末增添数据

发表评论

电子邮件地址不会被公开。 必填项已用*标注