C语言学习笔记(六)——文件操作

1.fopen函数

FILE *fopen(const char *path, const char *mode);
Fopen打开文件成功,返回有效FILE的有效地址,失败返回NULL
Path就是指定打开文件的路径,可以是相对路径,也可以是绝对路径,mode有以下几个值:
r 以只读方式打开文件,该文件必须存在,文件必须是可读的。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

只要成功用fopen打开的文件,使用完毕后一定要用fclose关闭。fclose的参数就是fopen的返回值

2.getc函数&putc函数

int getc(FILE *stream);
getc的参数是fopen成功打开文件后返回的指针,getc的返回值是一个char
getc的功能是以字节位单位读取文件内容
文本文件的最后结束标示是-1,也就是一个宏EOF

#define EOF -1
#include<stdio.h>
int main()
{
    char a[]="/home/liu/1/a.tet";
    FILE *p=fopen(a,"r");
    if (p)
    {
        while(1)//循环输出文本的值
        {
        char c=getc(p);
        if(c=EOF)
            break;
        print("%c",c);//此时输出a.txt的第一个字节
        //char c=getc(p);//此时再输出会输出a.txt的第二个字节
        fclose(p);
        //char c=0
        //while(c!=EOF)
        //{c=getc(p);printf("%c");}//此时的问题在于会把-1输出。可以把printf和c=get(p)调整位置避免此问题

    }
    else
    {
        printf("fail\n");//这里不需要调用fclose
    }
    return 0;
}

下面看看putc函数吧

#include<stdio.h>
int main()
{
    FILE *p=fopen("./a.txt","w");
    if(p)
    {
        putc('a',p);
        putc('\n',p);//向文件中写入一个字符
        fclose(p);
    }
    return 0;
}

getc必须用r模式打开,putc必须用w模式打开。
int putc(int c, FILE *stream);第一个参数是要写入的char,第二个参数是fopen返回的文件指针
EOF与feof函数文件结尾
程序怎么才能知道是否已经到达文件结尾了呢?EOF代表文件结尾
如果已经是文件尾,feof函数返回true。
int feof(FILE *stream);,参数就是fopen返回的文件指针
EOF不属于文件的内容,只是文件的结尾标示,而且也不要直接用-1来代替EOF。
只有文本文件才能通过EOF判断文件的结尾标示,对于二进制文件EOF是无效的

通过getc,putc读写指定文件

#include<stdio.h>
int main(int argc,char **args)
{
    if(argc<2)
    return 0;
    FILE *p=fopen(args[1],"w");
    if(p)
    {
        while(1)
        {
            char c =getchar();//从标准输入设备读取一个字符
            if(c=='0')
            break;
            putc(c,p);
        }
        fclose(p);
    }
}
int main(int argc,char **args)
{
    if (argc<2)
    return 0;
    FILE *p=fopen(args[1],"r");
    if(p)
    {
        char c=getc(p);
        while(c!=EOF)
        {
            printf("%c",c);
            c=getc(p);
        }
        fclose(p);
    }
    return 0;
}

拷贝文件及加密解密的代码

#include<stdio.h>
int main(int argc,char **args)
//命令行有三个参数,第一个是源文件,第二个是目标文件,第三个0代表加密,1代表解密
{
    if (argc<4)
    return -1;
    FILE *p=fopen(args[1],"r");
    FILE *p1=fopen(args[<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值