C语言文件

文件

在C语言中,文件操作就是让程序能够读取(看)文件里的内容,或者把数据写入(存)到文件里。

可以把它想象成看书和写字:

读文件:像“看书”,程序打开文件,读取里面的内容。

写文件:像“写字”,程序往文件里写入新内容(可以覆盖旧内容,也可以追加到末尾)。

文件操作的基本步骤

无论是读还是写,操作文件的流程都类似:

打开文件(fopen)→ 就像“翻开书”或“拿一个新本子准备写”。

读/写文件(fread/fwrite 或 fscanf/fprintf)→ 看书内容或写字。

关闭文件(fclose)→ 合上书或保存本子,防止数据丢失。

绝对路径以盘符开始的

相对路径不以盘符开始的,相当于当前项目而言的

转义字符

路径是以字符串的形式来进行表示的

需求:我要打印一个双引号

”:表示字符串的开头或者结尾

此时,我要打印一个普普通通的双引号

\”:表示改变\后面这个符号原本的含义,把他变成一个普普通通的双引号

#include <stdio.h>
int main(int argc, char const *argv[])
{
   char *file="D:\\download\\02-LinuxC\\03-Code";
   printf("%s \n",file);
    return 0;
}

读取数据(fgetc)

把本地文件中的数据,读到程序中来。

1.打开文件 fopen

2.读数据 fgetc fgets fread

fgetc一次读一个字符,读不到返回-1

fgets一次读一行,读不到返回null

fread 一次读多个

3.关闭文件

fclose

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE*file=fopen("a.txt","r");
    int res;
   while ((res=fgetc(file))!=-1)
   {
    printf("%c",res);
   }
   fclose(file);
    return 0;
}

文件的读写模式

文件的读

fegetc
#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE*file=fopen("a.txt","r");
    int res;
   while ((res=fgetc(file))!=-1)
   {
    printf("%c",res);
   }
   
    return 0;
}
fgets

fegts 细节:

每次读取一行数据,以换行符为准

如果读不到了,返回NULL

#include<stdio.h>
int main(int argc, char const *argv[])
{
    FILE*file=fopen("a.txt","r");
    char content[1024];
    char* res;
    while ( (res =fgets(content,sizeof(content),file))!=NULL)
    {
       printf("%s",res);
    }
    fclose(file);
    return 0;
}

fread

英文的abc:占用1个字节中文:

window64位当中,默认2个字节

fread细节:在读取的时候每次尽可能会把数组给装满,返回当前读取到的有效字节个数在读取的时候,文件:100个字节

数组长度:30

第一次:读取前面30个字节,把数组给装满函数返回30

第二次:读取后面30个字节,把数组给装满,函数返回30

第三次:读取后面30个字节,把数组给装满,函数返回30

第四次:读取剩余的10个字节,会把数据放在数组当中,函数返回10

第五次:没有数据可以被读取了,函数返回0

在里面fread(content, 1, 个数,file)1是一个大小空间(一个单元)等于一次读一个单元

个数是总大小

#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE *file = fopen("a.txt", "r");
    char content[10];
    int n;
    while ((n = fread(content, 1, sizeof(content), file)) != 0)
    {
        for (int i = 0; i < n; i++)
        {
           printf("%c",content[i]);
        }
    }
    return 0;
}

文件的写

fputc
#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE *file = fopen("a.txt", "w");
    char content[100];
    int n;
    n=fputc(97,file);
    printf("%c",n);
    return 0;
}

fputs
#include <stdio.h>
循环写入
void circulate() {
    FILE *file = fopen("b.txt", "w");
    if (file == NULL) {
        perror("Failed to open file");
        return 1;
    }

    char *messages[] = {"数据1\n", "数据2\n", "数据3\n"};
    for (int i = 0; i < sizeof(messages); i++) {
        fputs(messages[i], file);  // 循环写入
    }

    fclose(file);
}
int main(int argc, char const *argv[])
{
    FILE *file = fopen("a.txt", "w");
    char content[100];
    int n;
     n=fputs("你好你好",file);
     printf("%d",n);
    return 0;
}

fwrite
#include <stdio.h>
int main(int argc, char const *argv[])
{
    FILE *file = fopen("a.txt", "w");
    int n;
    char content[]={97,98,100,101};
    n=fwrite(content,1,sizeof(content),file);//一次读多个,返回写出的字节个数
    printf("%d\n",n);
    return 0;
}

文件的拷贝

思路:先读后写

#include <stdio.h>
int main()
{
    FILE *file = fopen("a.txt", "r");
    FILE *file_Copy = fopen("b.txt", "w");
    char *content;
    char neirong[100];
    while ((content = fgets(neirong,sizeof(neirong), file)) != NULL)
    {
      fputs(neirong,file_Copy);
    }
    fclose(file);
    fclose(file_Copy);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值