C语言文件操作

基础函数

打开和关闭文件

fopen()

fopen(文件名,使用文件方式)
使用文件方式描述
r打开一个已有的文本文件,允许读取文件。
w打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
a打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
r+打开一个文本文件,允许读写文件。
w+打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
a+打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

若打开的是二进制文件,在其后方加入b即可。
如果打开失败,会返回NULL。

fclose()

fclose(文件指针)

如果成功关闭,则返回0,若关闭失败,返回EOF(-1)
用法

#include <stdio.h>
#include <stdlib.h>

int main()
{

    FILE *fp;
    fp = fopen("test.txt","w+");
    fclose(fp);
    return 0;
}

顺序读写数据文件

fgetc()

fgetc(fp)

从fp指向的指针读取一个字符。每调用一次,fp后移一位。
读成功,返回所带的字符,失败则返回文件结束标志EOF(-1)

fputc()

fputc(ch,fp)

把字符ch写到文件fp指向的文件中。输出成功,返回该字符,否则返回EOF(-1)。

示例

示例1从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。

#include <stdio.h>
#include <stdlib.h>

//从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。
int main()
{
    FILE *fp;
    if((fp = fopen("test.txt","w+")) == NULL){
        printf("打开失败\n");
        exit(0);
    }
    char tmp;
    tmp = getchar();
    while(tmp!='#'){
        fputc(tmp,fp);
        tmp = getchar();
    }
    fclose(fp);
    return 0;
}

注意scanfgetchar的区别。
示例2
将一个文件中的信息复制到另一个文件中。

#include <stdio.h>
#include <stdlib.h>

//将一个文件中的信息复制到另一个文件中。

int main()
{
    FILE *fp1,*fp2;
    if((fp1 = fopen("test.txt","r")) == NULL){
        printf("文件1打开失败\n");
        exit(0);
    }
    if((fp2 = fopen("test_copy.txt","w")) == NULL){
        printf("文件2打开失败\n");
        exit(0);
    }
    char tmp;
    while((tmp = fgetc(fp1))!=EOF){
        fputc(tmp,fp2);
        //拷贝
    }
    //关闭文件
    fclose(fp1);
    fclose(fp2);

    return 0;
}

fgets()

从fp指向的文件中读取一个长度为n-1的字符串,存放到字符数组str中,如果读成功,返回地址str,失败则返回NULL。

fgets(str,n,fp)

fputs()

把str所指向的字符串写入到文件指针变量fp所指向的文件中。输出成功则返回0,否则返回非0值。

fputs(str,fp)

示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//从磁盘读入若干个字符串,对他们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。


int main()
{
    FILE *fp1,*fp2;
    char str[10][10],tmp[10];
    int i=0,j,k,n = 10;
    fp1 = fopen("test.txt","r");
    /*
    for(i=0;i<n;i++){
        gets(str[i]);
        //输入字符串
    }
    */
    while(fgets(str[i],10,fp1)!=NULL){
        i++;//puts(str[i++]);
    }
    //冒泡排序
    for(int i=0;i<n;i++){
        for(j = n-1;j>=i;j--){
            if(strcmp(str[i],str[j])>0)
            {
                strcpy(tmp,str[i]);
                strcpy(str[i],str[j]);
                strcpy(str[j],tmp);
            }
        }
    }
    printf("\nSort\n");
    for(i=0;i<n;i++){
        puts(str[i]);
        //输入字符串
    }

    fp2 = fopen("test_copy.txt","w+");
    for(int i=0;i<10;i++){
        fputs(str[i],fp2);
    }

    return 0;
}

fprintf()

fprintf(文件指针,格式字符串,输出表列)

fscanf()

fscanf(文件指针,格式字符串,输入表列)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 10
typedef struct Student_type{
    char name[10];
    int num;
    int age;
    char addr[15];
}stdu1;
//从键盘读入10个学生的有关数据,然后把他们转存到磁盘文件上去。

void save(){
    stdu1 stdu[3];
    FILE *fp;
    if(fp = fopen("stdu.txt","wb")==NULL){
        printf("打开失败\n");
    }
    for(int i=0;i<1;i++){
        scanf("%s%d%d%s",stdu[i].name,&stdu[i].num,&stdu[i].age,stdu[i].addr);
        printf("输入成功:%s %d %d %s\n",stdu[i].name,stdu[i].num,stdu[i].age,stdu[i].addr);
//dsa 23 54 fsdf
    }

    for(int i=0;i<1;i++){
        if(fwrite(&stdu[i],sizeof(struct Student_type),1,fp)!=1){
            printf("error");
        }
    }
    fclose(fp);
}
int main()
{
    save();

    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kilig*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值