• C语言里的文件函数


    1File *pf = fopen("文件名","打开方式");

    文件名可以加路径,两个"\"或者一个"/"

    打开方式有这么几种:r只读,r+可读可写,w只写,w+可读可写,会覆盖。a追加,a+可读可写。

    2、对于windows系统来讲,都可以带上b,因为在windows系统下,还是有这个区分的。

    尤其是这个回车转义字符。因为在 windows下面, 代表回车,而在linux/unix系统的文本文件下, 就代表一个回车。

     

    3Fopen 和 fclose要成对出现。就跟mallocfree一样,打开不关,跟申请了不释放一样,都会造成不安全的。所以一定要成对出现。

    Fclose(pf);

     

    4、getc() 和 putc() 得到一个 字符,和送出一个字符。

    示例用法:

    Int main(){
        FILE *pf = fopen("a.txt","r");
        Char c =0;
        While( (c=getc(pf))!=EOF){
        Printf("%c",c);
        }
        Printf("
    读取结束
    ");
        Fclose(pf);
        Getchar();
        Return 0;
    }
    Int main(){
        FILE *pf = fopen("b.txt","w");
        Char c[]="lifei";
        Int i = 0;
        For(;i<strlen(c);i++){
        Putc(c[i],pf);
        }
        Printf("写入结束
    ");
        Fclose(pf);
        Getchar();
        Return 0;
    }

    5、EOF 的值是-1代表文件结束。函数feof(pf) 用来判定一个文件是否已经到文件结尾了。如果到结尾的话,返回真,否则返回假?

    示例用法:

    EOF跟上面的第四个点的第一个案例是相同的。

     

    Int main(){
        FILE *pf = fopen("a.txt","r");
        Char buf[1024] = {0};
        while (!feof(pf)){
    //如果没有到文件结尾为真就继续执行。
            fgets(buf, sizeof(buf), pf);
            printf(buf);
        }
        printf("
    读取结束
    ");
        fclose(pf);
        getchar();
        return 0;
    }

     

    6、有几个函数总是蒙蔽。。。

     

    Printf()

     

    Sprintf();

     

    Fprintf();

     

    总是不知道谁是谁,干吗用的。现在就来厘清一下他们的关系:

     

    Printf();我们接触最多,是用于输出的,通常情况下直接输出到屏幕。当然也可以输出到文件中。

     

    Sprintf(); 是格式化输出,目标是 一个字符串。它比printf就多一个参数,就是最前面的字符数组,用于接收被输出的对象。

     

    Fprintf();是文件输出,前面加上文件目标就可以了。

     

    例程:

    #include <stdio.h>

    #include <string.h>

    #pragma warning(disable:4996)

    int main(){

    FILE  *pf = fopen("a.txt", "r");

    FILE *pfw = fopen("content.txt", "w");

    char buf[1024] = { 0 };

    char forout[100] = { 0 };

    int i = 1;

    while (!feof(pf)){

    memset(buf, 0, sizeof(buf));//这个 在 string.h 里面

    fgets(buf, sizeof(buf), pf);

    sprintf(forout, "第 %d 行:%s", i++,buf);//格式化输出到字符数组中。

    printf(forout);//输出到显示器

    fprintf(pfw,"%s",forout);//输出到文件

     

    }

    printf(" 读取结束 ");

    printf("写出结束 ");

    fclose(pf);

    getchar();

    return 0;

    }

    7、因为 fprintf();是打印数据到文件所以结合scanf()是从键盘得到数据,fscanf()就是从文件得到数据。

    fgets()一样,fscanf()也是从键盘上获取数据,不过fgets()可以获取文件结尾的回车符号,fscanf()不能获取结尾的回车换行符号。

    示例:

    #include <stdio.h>
    #pragma warning(disable:4996)
    
    int main(){
    
        FILE *pf = fopen("a.txt","r");
        char buf[200] = { 0 };
        while (!feof(pf)){
            fscanf(pf, "%s", buf);
            printf("%s
    ",buf);
        }
        printf("读取结束");
        fclose(pf);
        getchar();
        return 0;
    }

    8、stat函数

    例程:

    #include <stdio.h>
    #include <sys/stat.h>
    #pragma warning(disable:4996)
    
    int main(){
        //当你知道 只有跑可以追赶上别人的时候,你会不会跑?
    
        struct stat st;
        stat("main.c", &st);
        long len = st.st_size;
        printf("文件大小为:%d
    ", len);
    
        
    
        getchar();
        return 0;
    }

    打印文件:

    #include <stdio.h>
    #include <sys/stat.h>
    #pragma warning(disable:4996)
    
    int main(){
        //当你知道 只有跑可以追赶上别人的时候,你会不会跑?
    
        struct stat st;
        stat("main.c", &st);
        long len = st.st_size;
        printf("文件大小为:%d
    ", len);
    
        FILE *pf = fopen("main.c", "r");
        char buf[100] = { 0 };
        while (!feof(pf)){
    
            fgets(buf, sizeof(buf), pf);
            printf("%s", buf);
    
        }
    
    
        fclose(pf);
    
        getchar();
        return 0;
    }

     

    #include <stdio.h>
    #pragma warning(disable:4996)
    int main(){
        FILE *pf = fopen("a.txt", "r");
        if (pf == NULL)
            return 0;
        int position = ftell(pf);
        printf("文件刚刚打开时候的位置%d
    ",position);
        char buf[100] = { 0 }; 
        char _4out[100] = { 0 };
        int i = 1;
        while (!feof(pf)){
            printf("currentPosition:%d", ftell(pf));
            fgets(buf, sizeof(buf), pf);
            sprintf(_4out, "第 %d 行:%s",i++, buf);
            printf(_4out);
        }
        printf("
    第一遍结束,下面第二遍输出原文
    ");
        printf("值得注意的是:在windows文本文件环境下,一个回车由\r\n两个字符组成,所以第一行有八个字节,等到再次读取的时候当前位置是8.
    ");
        fseek(pf, 0, SEEK_SET);
        while (!feof(pf)){
            printf("当前位置:%d", ftell(pf));
            fgets(buf, sizeof(buf), pf);
            printf(buf);
        }
        fclose(pf);
        getchar();
        return 0;
    }

     

  • 相关阅读:
    数据ETL是指什么
    Laravel 虚拟开发环境 Homestead
    一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇] 狼人:
    一起谈.NET技术,NET 下RabbitMQ实践 [实战篇] 狼人:
    一起谈.NET技术,创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇] 狼人:
    一起谈.NET技术,ASP.NET前台代码绑定后台变量方法总结 狼人:
    一起谈.NET技术,Smart Client技术简要总结 狼人:
    一起谈.NET技术,ASP.NET页面间数据传递的方法 狼人:
    一起谈.NET技术,关于CLR内存管理一些深层次的讨论 [上篇] 狼人:
    一起谈.NET技术,一种简单的直观的高效的权限设计 狼人:
  • 原文地址:https://www.cnblogs.com/letben/p/5252158.html
Copyright © 2020-2023  润新知