zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    润乾V4导出TXT时自定义分隔符
    aix系统下的websphere的静默安装
    润乾V4报表放入WEBINF保护目录下如何实现
    初创公司谁来当你们的运维
    无密码身份验证:安全、简单且部署快速
    ASP .NET 如何在 SQL 查询层面实现分页
    世界那么大,你要去看看!
    你真的知道如何定义性能要求么?
    node-firefox 二三事
    轻轻修改配置文件完成 OpenStack 监控
  • 原文地址:https://www.cnblogs.com/letben/p/5252158.html
Copyright © 2011-2022 走看看