【黑马程序员】C语言基础-文件管理

来源:互联网 发布:matlab简单迭代算法 编辑:程序博客网 时间:2024/05/16 01:57

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



一、什么是文件

        文件有不同的类型,在程序设计中,主要用到两种文件:
        1)程序文件(ASCII码文件) 包括源文件(.c)、目标文件(.obj)、可执行文件(.exe)等。
        2)数据文件 文件内容不是程序,而是供程序运行时读写文件。

        为了简化用户对输入输出的设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各种设备都统一作为文件的处理。

        文件一般指存储在外部介质上得数据的集合。


二、文件名

       一个文件件要有一个唯一的文件标识,以便用户识别和引用。
       文件标识包括3部分:
       1)文件路径
       2)文件名主干
       3)文件后缀



三、文件指针

         每个被使用的文件都在内存中开辟了一个相应的文件信息去,用来存放文件的信息。这些信息保存在一个结构体变量中。该结构体由系统声明,取名FILE 
       定义文件类型的指针变量:
       FILE *文件指针名

四、文件的打开和关闭

        用fopen函数打开文件
        使用格式:
        fopen(文件名,使用文件方式);

      使用文件方式:
      1)“r”    只读   打开一个只存在的文件,准备从文件中读取数据,不能写入。
      2)“w”   只写   创建一个新文件,准备写入数据,不能读,如果文件存在则覆盖。
      3)“a”    追加   打开一个已存文件,在尾部追加信息,不能读。如果不存在,则创建并加入。
      4)“r+”   读写   创建新文件,重名覆盖。
      5)“w+”  读写  创建新文件,重名覆盖。
      6)“a+”   读写   追加数据信息
      7)“t”     打开文本文件 
      8)“b”    打开二进制文件

      用fclose关闭文件
      使用格式:
      fclose(文件指针名);
      
      例:
FILE *fp;fp = fopen("a1","r");fclose(fp);

       *使用此函数必须调用stdio.h头文件

       

四、顺序读写数据文件

        fgetc函数:从文件指针指向的文件读入一个字符   
        返回值:读成功返回所读字符,失败返回结束标志EOF
        调用格式:
fgetc(文件指针名);
 
        fputc函数:把字符写到文件指针所指向的文件中
        返回值:输出成功返回输出的字符,失败分那会结束标志EOF
        调用格式:
fputc(字符,文件指针名);

        例:
#include <stdio.h>int main(int argc, const char * argv[]) {    //定义字符    char ch;    //定义文件指针    FILE *fp = fopen("av.txt", "w+");    //判断是否指向成功    if (fp!=NULL) {        //输入字符串        printf("请输入一个字符串:\n");        ch = getchar();        //字符计数器        int count = 0;        //        while (ch!='\n') {            count ++;            fputc(ch, fp);            ch = getchar();        }        printf("您总共收入了%d个字符\n",count);    }        rewind(fp);    ch = fgetc(fp);    while (ch!=EOF) {        putchar(ch);        ch = fgetc(fp);    }    fclose(fp);    printf("\n");    return 0;}

      fgets函数:从文件指针指向的文件读入一个规定长度的字符串,存入字符数组
      返回值:成功返回地址,失败返回NULL
      使用格式:
fgets(字符串指针,字符串长度,文件指针);

      fputs函数:把字符串指针指向的字符写入文件指针指向的文件中
      返回值:输出成功返回0,否则返回非0值
      使用格式:   
fputs(字符串指针,文件指针);

     
#include <stdio.h>int main(int argc, const char * argv[]) {    char a[50] = {"my name is Ace!"};    int count = 0;    FILE *fp = fopen("ace.txt", "w+");    if (fp!=NULL) {        count = fputs(a, fp);        printf("写入成功,本次写入了%d个字符!\t",count);    }    printf("\n");    rewind(fp);    fgets(a, sizeof(a), fp);    printf("文件中的信息为%s\n",a);    fclose(fp);    return 0;}

       fscanf和fprintf函数:格式化读写函数
       使用格式:
fscanf(文件指针名,格式字符串,输入表列);

       数据块读写函数:
       fread函数:读取文件中的数据
       fwrite函数:将文件写入文件
       使用格式:
       
fread(buffer,size,count,fp);
fwirte(buffer,size,count,fp);

       buffer:一个指针,在fread中表示存放输入数据的首地址
                                      在fwrite中表示存放输出数据的首地址
     size:表示数据块块数
     count:表示要读写的数据块块数
     fp:文件指针
    
      例:
#include <stdio.h>struct Students{    char name[21];    int age;    float score;};int main(int argc, const char * argv[]) {    //定义结构体数组    struct Students stu[3] = {{"瓦王",40,90.22f},{"地狱咆哮",55,95.12f},{"吉安娜",30,70.98f}};    //打开文件指针//    int j = sizeof(struct Students);//    printf("%d\n",j);    FILE *fp = fopen("wow.data", "wb+");    if (fp!=NULL) {    //写入数据    for (int i=0; i<3; i++) {        fwrite(&stu[i], sizeof(struct Students), 1, fp);    }    printf("写入成功!\n");        //接收文件数据    rewind(fp);        struct Students stu2[3];    for (int i=0; i<3; i++) {        fread(&stu2[i], sizeof(struct Students), 1, fp);    }    for (int i=0; i<3; i++) {        printf("姓名:%s 年龄:%d 战力:%.2f\n",stu2[i].name,stu2[i].age,stu2[i].score);    }    }    //结束文件指针    fclose(fp);    return 0;}

     rewind函数:将文件指向文件开头
     使用格式:
     
rewind(文件指针);


       

0 0