C语言文件操作详细讲解

C语言文件操作详细讲解

目录

  • 文件的打开和关闭
    • fopen和fclose
  • 文件的输入输出
    • 字符输入输出:fputc和fgetc
    • 字符串输入输出:fputs和fgets
    • 格式化输入输出:fscanf和fprintf
    • 数据块输入输出:fread和fwrite

文件的打开和关闭

文件的打开使用的是函数fopen,它是stdio函数库中的函数,函数原型为

FILE *fopen( const char * filename, const char * mode );
  • const char * filename为文件名
  • const char * mode为打开的方式

该函数返回一个指向文件的指针

FILE *fp;

函数打开方式有很多:

读写方式文件类型含义读写方式文件类型含义
“r”文本文件打开文本,只读“rb+”二进制文件打开二进制文件,读、覆盖写
“w”文本文件建立文本文件,只写“wb+”二进制文件打开二进制文件,先写后读
“a”文本文件打开文本文件,追加“ab+”二进制文件打开二进制文件,读,追加
“rb”二进制文件打开二进制文件,只读“rt”文本文件打开文本文件,只读
“wb”二进制文件建立二进制文件,只写’‘wt”文本文件建立文本文件,只写
“ab”二进制文件打开二进制文件,读、追加“at”文本文件打开文本文件,追加
“r+”文本文件打开文本文件,读、覆盖写“rt+”文本文件打开文本文件,读、覆盖写
“w+”文本文件打开文本文件,先写后读“wt+”文本文件打开文本文件,先写后读
“a+”文本文件打开文本文件,读、追加“at+”文本文件打开文本文件,读、追加

文件的关闭使用的是fclose函数,该函数也在函数库stdio.h中,函数原型为:

int fclose( FILE *fp );

文件的输入输出

字符输入输出

fputc函数在函数库stdio.h中,函数原型为:

int fputc( int c, FILE *fp );

该函数将单个字符或数字写入文件中;
fgetc函数在函数库stdio.h中,函数原型为:

int fgetc( FILE * fp );

该函数从文件中读出一个数或字符并返回

#include <stdio.h>
/*单个字符输入输出 */
/*简单打开文件并用fputc和fgetcxie读文件 并用feof检查是否结束*/
int main()
{
    FILE * fd = NULL;
    char ch = ' ';
    char sh = ' ';
    fd = fopen("test.txt", "w");        //以w打开文件
    for(int i = 0;i<10;i++)
    {
        ch = getchar();                    //将字符交给ch
        fputc(ch, fd);                     //将ch写入文件
    }
    fclose(fd);                            //关闭文件
    fd = fopen("xiaofei.txt", "r");
    int i = 0;
    while(i != 1)
    {
        sh = fgetc(fd);                    //将fd指的一个字符给sh
        printf("%c", sh);                  //输出sh
        i = feof(fd);                      //检查指针fd是否指向文本结束
    }
    fclose(fd);                            //关闭文件

    return 0;
}
字符串输入输出

fputs函数在函数库stdio.h中,该函数原型为:

int fputs( const char *s, FILE *fp );

该函数将s字符串写入文件中,如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF;

fputs函数在函数库stdio.h中,该函数的原型为:

char *fgets( char *buf, int n, FILE *fp );

该函数将从文件中读出大小为n-1的字符串,它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。如果这个函数在读取最后一个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。

#include <stdio.h>
/*用fputs和fgets输入输出文件中的内容 */
/*注意fputs和fgets还有其他用法 */
int main()
{
    FILE * fp;
    char ch[100];
    char sh[100];
    fp = fopen("xiaofei.txt", "w");
    fgets(ch,100,stdin);
    fputs(ch,fp);
    fclose(fp);
    fp = fopen("xiaofei.txt", "r");
    fgets(sh, 100, fp);
    fputs(sh,stdout);
    fclose(fp);

    return 0;
}
格式化输入输出

fprintf函数在函数库stdio.h中,该函数的原型为:

int fprintf(FILE *fp,const char *format, ...);

该函数用来将数据写如文件,下面会演示。

fscanf函数在函数库stdio.h中,该函数的原型为:

int fscanf(FILE *fp, const char *format, ...);

该函数将文件中的数据取出,下面演示:

#include <stdio.h>
#include <stdlib.h>
#define N 2

struct stu{
    char name[10];
    int num;
    int age;
    float score;
} boya[N], boyb[N], *pa, *pb;


int main()
{
    FILE *fp;
    int i;
    pa=boya;
    pb=boyb;
    if( (fp=fopen("D:\\demo.txt","wt+")) == NULL )
    {
        puts("Fail to open file!");
        exit(0);
    }
    //从键盘读入数据,保存到boya
    printf("Input data:\n");
    for(i=0; i<N; i++,pa++)
    {
        scanf("%s %d %d %f", pa->name, &pa->num, &pa->age, &pa->score);   
    }
    pa = boya;
    //将boya中的数据写入到文件
    for(i=0; i<N; i++,pa++)
    {
        fprintf(fp,"%s %d %d %f\n", pa->name, pa->num, pa->age, pa->score);   
    }
    //重置文件指针
    rewind(fp);
    //从文件中读取数据,保存到boyb
    for(i=0; i<N; i++,pb++)
    {
        fscanf<N; i++,pb++)
    {
        prin(fp, "%s %d %d %f\n", pb->name, &pb->num, &pb->age, &pb->score);
    }
    pb=boyb;
    //将boyb中的数据输出到显示器
    for(i=0; i<N; i++,pb++)
    {
        printf("%s  %d  %d  %f\n", pb->name, pb->num, pb->age, pb->score);
    }
    fclose(fp);
    return 0;
}

数据块输入输出

fwrite函数在函数库stdio.h中,函数原型为:

size_t fwrite(void *buf, size_t size, size_t count, FILE *fp);

  • size为每次写入的字符个数
  • count为写入的次数
  • buf为写入的数据
  • 该函数将buf中的内容写入fp所指的文件中
    fread函数在函数库stdio.h中,函数原型为:
size_t fread(void *buf, size_t size, size_t count, FILE *fp);
  • size为没次读出时字符的个数
  • count为读取的次数
  • buf为读出的内容
  • 该函数将fp所指的文件的内容读到buf中
#include <stdio.h>
/*使用fwrite和fread两个函数进行文件的数据块输入/输出 */
int main()
{
    FILE *fp;
    char ch[100];
    char sh[100];
    fp = fopen("xiaofei.txt","w");
    fgets(ch,100,stdin);                           //字符串输入
    fwrite(ch,50,2,fp);                            //将字符串ch存入文件
    fclose(fp);
    fp = fopen("xiaofei.txt", "r");
    fread(sh,100,1,fp);                            //将文件中的二进制读出存在sh中
    fputs(sh,stdout);                              //输出sh
    fclose(fp);

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值