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

------<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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值