菜鸟之路-07

文件:


 文件的分类:

    文本文件: 一打开就能看懂的文件

 

   二进制文件:一打开是乱码的东西,或者说全是二进制数字的文件叫二进制文件。

 

 文件流:就是将文件一段一段的加载,然后进行读取,比如看电视下面的加载栏

 

 文件操作的步骤:

        打开文件

        操作文件

        关闭文件

 怎么用代码的方式打开文件?

    fopen函数:

   fopen(路径,操作方式)

 路径:

    绝对路径:文件的全路径

    相对路径:相对于文件当前的路径

  r:  只读,如果文件不存在,那就返回NULL

  w:  只写,如果文件存在,则会覆盖原来的文件,如果不存在,则会创建。

  a:  追加,如果文件存在,则会在后面追加原来的文本内容,如果文件不存在,则会创建。(不管存在,不存在最终都会返回文本指针)

 

  r+: 只是在r的基础上增加了写的功能

  w+: 只是在w的基础上增加了读的功能

  a+: 只是在a的基础上增加了读的功能

  t:  文本文件

  b:   二进制文件

 

  注意:在MAClinuxUNIX下,文本文件和二进制文件是一样的

 

  windows下有区别,写入的是文本文件,会把所有的\n替换成\r\n,二进制文件不会替换。

 

 2)几个函数的使用方法:

 


 fgetcfputc函数

 

 fgetc函数:读取一个字符

 fputc函数:写入一个字符



#include <stdio.h>

#include <string.h>

void writeTest(){

  /*  FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "w");

    

    if (fp !=NULL) {

        char str[50]="hello";

        unsigned long len=strlen(str);

        for (int i=0; i<len; i++) {

            fputc(str[i], fp); //用循环的方式写入字符,不用一个一个的写。

        }

        

        

        

        fclose(fp);

    }


*/

}

int main(int argc, const char * argv[]) {

 FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "r");

    if (fp !=NULL) {//  NULL 就是 0  16进制0x0

//        char str[50]={0};

//        fgets(str, 3, fp); //这里的3 实际还要留一个空格给'\0',所以读取的是he

//        //用循环怎么读取呢

//        这是一个手动的读取部分

//        printf("%s",str);

//        

        while(1){

            

            char ch =fgetc(fp);

            

            if (ch==EOF) { //EOF是结束符

                break;

            }

            printf("%c",ch);

        }

        fclose(fp);

    }

    

    return 0;

}



 3)fgets 和fputs的使用

 

 fgets fputs 函数

 fgets :读取一个字符串

 fputs 输入一个字符串




#include <stdio.h>


int main(int argc, const char * argv[]) {

    /*FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "w");

    if (fp) { //fp为真,则继续往下执行  仔细剖析 fp !=NULL

        

        char str[50]="aksjfk";

        fputs(str, fp);

        

        printf("%s\n",str);

        

        

        

        fclose(fp);

    }

    */  //写入字符串

    

    FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "r");

    if (fp) { //fp为真,则继续往下执行  仔细剖析 fp !=NULL

        

//        char str[50]={0};

//        fgets(str,4, fp);//这里的4,实际得到是3,要留一个位置给'\0'

//        

//        printf("%s\n",str);

//       怎么用循环的方式读取字符串        返回代表字符串还未到末尾

                                       //这里feof(fp)  返回代表字符串到末尾

        

    while(1){

        if (feof(fp)) {

            

            break;

        }

       

            char str[50];//这里的字符串每次都会被覆盖,可以用断点查看。

            fgets(str, 10, fp);

        

            printf("%s",str);

        

        

        }

        fclose(fp);

    }

    


    

    return 0;

}


4)fprintf  和fscanf使用:

 

 fprintf (变量指针,"格式控制符",参数列表)

 fscanf(变量指针,"格式控制符",地址列表)




#include <stdio.h>


void testFprintf(){

    

    FILE * fp = fopen("/Users/ios001/Desktop/1.txt", "w");

    

    if (fp) {

        

        fprintf(fp, "%d",99);

        

        fclose(fp);

    }

}


int main(int argc, const char * argv[]) {

    

    fprintf(stdout, "哈哈哈哈哈\n"); //printf没差别,stdout代表在控制台输出

    

    int num;

    fscanf(stdin, "%d",&num); //stdin在控制台输入

    

    printf("num=%d\n",num);

    

    

    

    /*

     FILE * fp = fopen("/Users/ios001/Desktop/1.txt", "r");

     

     if (fp) {

     

     //        int num;

     //        char ch;

     //        fscanf(fp, "%c%d",&ch,&num);

     //

     //        printf("ch=%c    num=%d\n",ch,num);//a 99

     

     char str[50] = {0};

     char str2[50];

     fscanf(fp, "%s\n%s",str,str2);

     

     

     puts(str);

     puts(str2);

     fclose(fp);

     }

     */

    

    return 0;

}


5)fread 和write函数的使用:

 


//  freadfwrite函数



#include <stdio.h>

#include <string.h>

int main(int argc, const char * argv[]) {

//    FILE *fp =fopen("/Users/huanglichao/Desktop/3.txt", "r");

//    if (fp) {

//        char str[50]={0};  

//        fread(str, 1, 100, fp); 它只关心具体读的字节数,不会关心这些自己里面有没有换行

//        printf("%s",str);

//       

    

  FILE *fp =fopen("/Users/huanglichao/Desktop/3.txt", "w");

    if (fp) {

        char str[50]="你妈的就阿卡哈";

        unsigned long len=strlen(str);

        fwrite(str,1 , len, fp);//最好不要写太大,因为有垃圾值在其中,文件就打不开了

        

        printf("oubasang\n");

        fclose(fp);

    }

    return 0;

}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值