C语言里的文件函数

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

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

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

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

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

 

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("\n读取结束\n");
    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("写入结束\n");
    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("\n读取结束\n");
    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("\n读取结束\n");

printf("写出结束\n");

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\n",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\n", 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\n", 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\n",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("\n第一遍结束,下面第二遍输出原文\n");
    printf("值得注意的是:在windows文本文件环境下,一个回车由\\r\\n两个字符组成,所以第一行有八个字节,等到再次读取的时候当前位置是8.\n");
    fseek(pf, 0, SEEK_SET);
    while (!feof(pf)){
        printf("当前位置:%d", ftell(pf));
        fgets(buf, sizeof(buf), pf);
        printf(buf);
    }
    fclose(pf);
    getchar();
    return 0;
}

 

 

posted on 2016-03-07 22:14  木鸟飞  阅读(455)  评论(2编辑  收藏  举报

导航