C语言文件大总结

1.文件打开
r 打开文本文件,只读,该文件必须存在
r+ 打开文本文件,可读写,该文件必须存在。
w 打开文本文件,只写,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开文本文件,可读写,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

rb打开二进制文件,只读,该文件必须存在
wb打开二进制文件,只写,若文件不存在则建立该文件。

总结:不带b的是对文本文件(如.txt)的操作,带b的是对二进制文件(如.dat)进行操作,而我们最常用的是文本文件,打开后从头写则不加a,接着写则加a,带+的表示既可读又可写,r打开没有的话就出错,w打开没有的话自己会建立一个文件

FILE *fp;
if((fp=fopen("1.txt","r"))==NULL)
{
    printf("cannot open this file\n");
    exit();
}

简洁写的话:

1:FILE *fp=fopen("1.txt","r");

///注意路径,转义字符2:FILE *fp = fopen("D:\\demo.txt","rb");3:FILE *fp=fopen("F:\\Users\\My_2\\Desktop\\C\\代码备份\\背包问题.txt","r");

程序末尾记得关闭文件

fclose(fp);

2.读入

从文件里读出字符
fgetc(fp):从文件(磁盘)中读出
fgetc(ch,fp);将字符写入到文件(磁盘)中

从文件里读出字符串
fgets(str,n,fp)
fputs(str,fp)
fgets最多读取n-1个字符,且一行行读,结束标志可以是读了n-1个字符,也可以是读到了换行符‘\n’,所以,平时用fgets都是为了读一行故把n设大大的既可

    例:
    FILE *fp;
    fp=fopen("1.txt","r");
    while(fgets(b,100,fp)!=NULL)
    {
        printf("%s",b);
        strcat(c,b);
    }
    fclose(fp);

fscanf(fp,"%s",str)
printf(fp,"%s",str)

    FILE *fp;
    if(fp=fopen("1.txt","r"))
    while(fscanf(fp,"%s",b)!=EOF)
    {
        printf("%s",b);
        printf("\n");
    }
    fclose(fp);

fgets与fscanf区别在于前者一行行读,不管有没有读完那么第二次进入下一行,后者碰到空格就会停下,第二个fscanf会从空格后开始读,所以在读字符串时候,如果要求是一行算一个字符串,那么用fgets,如果要求以空行为分隔符,如单词则用fscanf;还有要注意的是fgets结束标志是NULL,fscanf结束标志是EOF

读结构体数据
fread(buffer, size, count, fp);
从fp所指文件中将count个,每个所占字节数为size的数据赋给buffer,buffer是一个地址
经常应用是将文件中结构体数据使用fread赋给buffer,也就是说fgets用于字符串,fread用于其他类型,当然,fscanf通用的

#include <stdio.h>
#include <string.h>
int main()
{
   FILE *fp;
   char c[] = "This is runoob";
   char buffer[20];
 
   /* 打开文件用于读写 */
   fp = fopen("file.txt", "w+");
 
   /* 写入数据到文件 */
   fwrite(c, strlen(c) + 1, 1, fp);
 
   /* 查找文件的开头 */
   fseek(fp, 0, SEEK_SET);
 
   /* 读取并显示数据 */
   fread(buffer, strlen(c)+1, 1, fp);
   printf("%s\n", buffer);
   fclose(fp);
   
   return(0);
}

以上几种读取称为顺序读取,意思是从头开始读,但是,有时我们需要文件中中间位置数据,此时如果还顺序读取,那效率可就要了亲命了啊!

fseek函数作用是移动文件指针,就是把文件指针移动到你想要读数据位置,然后再利用fread等读数据
fseek函数样式:fseek(fp, long offset, fromwhere);
offset:偏移量,是long型数据,故加个L
fromwhere:起始位置,0表示文件开始,1表示文件当前位置,2表示文件末尾

范例一:fseek(fp, 0L, 2);
解释:文件指针定位到文件末尾,偏移0个字节
范例二: fseek(fp,50L,0);或fseek(fp,50L,0);
解释:其作用是将位置指针移到离文件头50个字节处。

#include <stdio.h>
#include <stdlib.h>//fseek函数调用
int main()
{
    FILE * fp = fopen("a.txt", "r+");
    if (fp == NULL) {
        printf("file error\n");
        exit(1);
    }
    fseek(fp, 2, SEEK_SET);//光标移到文件开始起第二个字节处。
    fwrite("yun", 1, 3, fp); //文件内写入内容yun
    fclose(fp);
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42034217/article/details/84729984