【黑马程序员】C语言文件

原创 2015年11月17日 16:44:02

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、文件的概念及分类


1.文件是什么?

文件指存储在外部介质上数据的集合,这个数据集有一个名称,叫做文件名


2.文件的分类


1)从用户的角度看,文件可分为普通文件和设备文件两种


2)从文件编码的方式来看,文件可分为ASCII码文件和二进制文件两种


二、文件的操作步骤及原理


1.文件的操作步骤


1)引入头文件(stdio.h)

2)  定义文件指针

3)打开文件

4)读写文件

5)关闭文件


三、c语言文件指针


1.c语言文件指针

在c语言中用一个指针变量指向一个文件,这个指针称为文件指针


一般形式:

FILE *指针变量标示符;


四、文件的打开(fopen函数)


文件指针名 = fopen(文件名,使用文件方式);


五、文件关闭函数(fclose函数)


文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件 的数据丢失等错误


fclose(文件指针)


*注意:如果文件写操作时,没有进行关闭,可能会导致文件写入失败


六、字符读写函数


1.字符写入函数fputc

字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或想文件写入一个字符


fputc函数的功能是把一个字符写入指定的文件中。一般形式:


fputc(字符,文件指针);


2.读取文件中的字符fgetc


一般形式: fgetc(文件指针)


<span style="font-size:14px;">//
//  main.m
//  保存键盘输入的字符串到文件,并输出
//
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //定义一个数组来存储用户输入的字符串
        char str[100];
        //提示用户输入一个字符串
        printf("请输入一个字符串:\n");
        //接收用户输入的字符串
        gets(str);
        //定义一个文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            for (int i=0; i<strlen(str); i++) {
                fputc(str[i], fp);   //将字符串写入文件
            }
            printf("写入成功!\n");
        }
        rewind(fp);   //将指针放在开始位置
        printf("写入的字符串是:\n");
        //输出字符串
        char s = fgetc(fp);
        while (s!=EOF) {
            putchar(s);
            s = fgetc(fp);
        }
        printf("\n");
        fclose(fp);
    }
    return 0;
}
</span>

七、字符串读写函数:fgets和fputs


1.fgets()是一个安全的字符串接收的函数


一般的格式:

fgets(数组名,数组长度,stdin);

当输入的字符串的长度大于数组的长度,fgets会自动的把数组的最后一个元素变成\0


2.fputs()也是一个文件操作相关的函数

格式:   fputs(数组名,stdout);


*注意:1)fgets读取的时候,当文件内容读取完毕后,会给字符加上结束符\0

2)  fgets读取的时候,当遇到\n或者EOF,读取结束


<span style="font-size:14px;">//  main.m
//  保存键盘输入的字符串到文件,并输出,用fgets和fputs
//
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //定义一个数组用来接收用户的输入
        char str[100];
        //提示用户输入
        printf("请输入一个字符串:\n");
        //接收用户的输入
        fgets(str, sizeof(str),stdin);
        fputs(str, stdout);
        //写入文件
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            fputs(str, fp);
            printf("文件写入成功!\n");
        }
        //读取文件
        rewind(fp);
        char str2[100];
        fgets(str2, sizeof(str2), fp);
        fputs(str2, stdout);
        
    }
    return 0;
}
</span>

八、数据块读写函数:fread和fwrite


1.数据块读写函数


读数据块函数调用的一般形式为:


fread(buffer,size,count,fp);

写数据块函数调用的一般形式:


fwrite(buffer,size,count,fp);


buffer:是一个指针,它表示存放数据的首地址

size:表示数据块的字节数

count:表示要读写的数据块数

fp:文件指针


<span style="font-size:14px;">//
//  main.m
//  从文件中读写结构体信息
//  从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上
//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

//定义一个结构体
typedef struct students{
    
    char name[20];
    int  no;
    int  age;

}stu;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建一个结构体数组
        stu boys[2];
        //提示用户输入学生信息
        for (int i=0; i<2; i++) {
            char ch[20];
            printf("请输入第%d个学生的姓名:\n",i+1);
            scanf("%s",ch);
            strcpy(boys[i].name, ch); //接收学生姓名
            printf("请输入第%d个学生的学号:\n",i+1);
            scanf("%d",&boys[i].no);  //接收学生学号
            printf("请输入第%d个学生的年龄:\n",i+1);
            scanf("%d",&boys[i].age);  //接收学生年龄
        }
        //创建文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            //写入文件
            fwrite(boys, sizeof(boys), 1, fp);
            printf("文件写入成功!\n");
        }
        rewind(fp);
        //从文件中读取信息
        stu b[2];
        fread(b, sizeof(b), 1, fp);
        for (int i=0; i<2; i++) {
            printf("学生%d:%s,%d,%d\n",i+1,b[i].name,b[i].age,b[i].no);
        }
        fclose(fp);
    }
    return 0;
}
</span>

九、格式化读写函数fscanf和fprintf


1.这两个函数的调用格式为:

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

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


<span style="font-size:14px;">//
//  main.m
//  读取和写入一个二维数组
//  使用fprintf和fscanf将一个二维数组逐行写入到文件中
//    1,2#
//    3,4#
 //   5,6#

//  Created by Brisinga on 15/11/17.
//  Copyright © 2015年 yan. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int a[3][2] = {1,2,3,4,5,6};
        //创建一个文件指针
        FILE *fp = fopen("a.txt", "w+");
        if (fp!=NULL) {
            //写入到文件中
            for (int i=0; i<3; i++) {
                fprintf(fp,"%d,%d#\n",a[i][0],a[i][1]);
            }
            printf("写入成功!\n");
        }
        //文件指针复位
        rewind(fp);
        //读取二维数组
        int b[3][2];
        for (int i=0; i<3; i++) {
            fscanf(fp,"%d,%d#\n",&b[i][0],&b[i][1]);
        }
        //输出取出来的二维数组
        for (int i=0; i<3; i++) {
            for (int j=0; j<2; j++) {
                printf("%d ",b[i][j]);
            }
        }
        fclose(fp);  //关闭文件指针
    }
    return 0;
}
</span>

十、文件的随机读写

1.什么是随机读写

  移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写

   实现随机读写的关键是要按要求移动位置指针,这成为文件的定位、


2.文件定位

 移动文件内部位置指针的函数主要由两个:

rewind():   rewind(文件指针);

fseek():   fseek(文件指针,位移量,起始点);


注意: 

还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往

往计算的位置 会出现错误。


版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员:3分钟带你读懂C/C++学习路线

http://blog.csdn.net/itcast_cn/article/details/52302287         随着互联网及互联网+深入蓬勃的发展,经过40余年的时间...
  • baidu_26352053
  • baidu_26352053
  • 2016年12月10日 16:09
  • 1707

黑马程序员--一个为进入黑马云六的C++屌丝的28个日夜

首先我要告诉大家,我是一个在大学学了三年C++的人,可能你们会问我,学C++不是挺好的?干嘛突然间要重新学习java呢?况且C++以后的发展不也挺好吗?        我应该怎么回答你们呢?这也是我...
  • heima_hb5
  • heima_hb5
  • 2014年08月22日 08:52
  • 2392

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1499

黑马程序员201408-201412最新iOS8的C语言

  • 2015年09月10日 15:05
  • 51B
  • 下载

黑马程序员-C语言笔记(四)函数与多文件开发

while 循环   while循环格式   while (条件) {   }       运行原理 1.如果一开始条件就不成立...
  • nsjiexishede
  • nsjiexishede
  • 2014年06月18日 08:54
  • 225

黑马程序员--C语言自学笔记---14static、extern、文件

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.   static和extern 1)        两个都是用来修饰变量的(局部的...
  • biangabiang
  • biangabiang
  • 2015年12月24日 21:51
  • 243

黑马程序员-C语言文件操作相关函数

格式:一般操作一个文件分为以下5个部分 1.导入头文件、定义文件指针     FILE *fp = NULL;  //FILE是一个别名必须全大写 2.使用fopen打开一个文件,打开方式有(r、w、...
  • FlyWithDe
  • FlyWithDe
  • 2015年07月31日 20:51
  • 211

黑马程序员-关于C语言多文件联合输出

对于对文件联合输出的参考 在函数这一节MJ老师建了一个文件夹在里面向我们展示了多文件联合开发,   注意点: 1.函数的定义放.c文件,函数的声明放.h文件 2.如果要使用某个.c文件中定义...
  • dsxcoolok
  • dsxcoolok
  • 2014年10月06日 13:08
  • 375

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、什么是文件         文件有不同的类型,在程序设计中,主要用到两种...
  • liehuodd
  • liehuodd
  • 2015年11月25日 11:48
  • 131

9、黑马程序员-C语言inclue和多文件开发

一、include 1> 作用:拷贝右边文件的所有内容到#include所在的位置 2> 自定义的文件用"",系统自带的文件用 3> #include 的目的:拷贝printf函数的声明 #inc...
  • zwcshy
  • zwcshy
  • 2014年12月01日 21:23
  • 232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【黑马程序员】C语言文件
举报原因:
原因补充:

(最多只允许输入30个字)