【C 语言】文件操作 ( getc 和 putc 函数 )

举报
韩曙亮 发表于 2022/01/11 01:17:39 2022/01/11
【摘要】 文章目录 一、getc 函数二、putc 函数二、使用 getc 和 putc 函数实现文件加密操作四、使用 getc 和 putc 函数实现文件解密操作 一、getc 函数...





一、getc 函数



getc 函数的作用是从 FILE* 指针指向的文件中读取 1 1 1 个字符 ,

int getc(FILE *stream);

  
 
  • 1

FILE *stream 参数 : 要读取字符的文件 ;

int 返回值 : 读取到的字符返回 int 类型值 ;


如果要读取文件中的内容 , 需要循环逐个字节读取 ;

文件结尾标识符是 EOF

#define EOF (-1)

  
 
  • 1

在文本中 , 读取到 EOF , 说明读取到文件结尾了 ;

#include <stdio.h>

int main()
{
    // 以 r 只读方式 打开 二进制文件
    FILE *p = fopen("D:\\a.txt", "r");
    if(p == NULL)
    {
        printf("File Open Failed !\n");
    }else
    {
        printf("File Open Success !\n");

        char c = 0;
        // 读取到文件末尾 EOF 退出循环
        while(c != EOF){
            c = getc(p);
            printf("%c", c);
        }

        // 如果打开成功 , 则需要关闭文件
        fclose(p);
    }

    printf("Main End\n");
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

执行结果 :

在这里插入图片描述





二、putc 函数



putc 函数的作用是 , 一次写入一个字符到文件中 ;

putc 函数原型 :

int putc(int char, FILE *stream) 

  
 
  • 1

int char 参数 : 要写入的字符 ;

FILE *stream 参数 : 要写入的文件系统 ;


代码示例 :

#include <stdio.h>

int main()
{
    // 以 w 只写方式 打开 二进制文件
    FILE *p = fopen("D:\\a.txt", "w");
    if(p == NULL){
        printf("File Open Failed !\n");

    }else{
        printf("File Open Success !\n");

        char c = 'A';
        int i = 0;

        for(i = 0; i < 26; i ++){
            putc(c, p);
            c++;
        }

        // 如果打开成功 , 则需要关闭文件
        fclose(p);
    }

    printf("Main End\n");
    return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

执行结果 : 输出

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  
 
  • 1

在这里插入图片描述





二、使用 getc 和 putc 函数实现文件加密操作



逐个字节加密 : 使用 getc 函数读取一个字节 , 然后加密 , 再用 putc 函数写出一个字节到另外一个文件中 ;

#include <stdio.h>

#define SEC 5

int main()
{
    // 打开一个文件 , 以读的方式
    // r : 使用读的方式打开一个文件 ;
    FILE *p = fopen("D:\\a.txt", "r");

    // 打开一个文件 , 以写的方式
    // w : 如果文件不存在 , 就创建文件 , 如果文件存在 , 就将该文件覆盖 , 总之写出的是一个新文件 ;
    FILE *p2 = fopen("D:\\b.txt", "w");

    char s = 0;
    while ((s = getc(p)) != EOF){
        // 字符自增
        s += SEC;

        // 将读取到的数据写入到 p2 文件中
        putc(s, p2);
    }

    // 关闭文件
    fclose(p);
    fclose(p2);

    printf("Main End\n");
    return 0;
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

执行结果 :

a.txt 内容 :

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  
 
  • 1

加密后的 b.txt 内容 :

FGHIJKLMNOPQRSTUVWXYZ[\]^_

  
 
  • 1

在这里插入图片描述





四、使用 getc 和 putc 函数实现文件解密操作



逐个字节加密 : 使用 getc 函数读取一个字节 , 然后解密 , 再用 putc 函数写出一个字节到另外一个文件中 ;

#include <stdio.h>

#define SEC 5

int main()
{
    // 打开一个文件 , 以读的方式
    // r : 使用读的方式打开一个文件 ;
    FILE *p = fopen("D:\\b.txt", "r");

    // 打开一个文件 , 以写的方式
    // w : 如果文件不存在 , 就创建文件 , 如果文件存在 , 就将该文件覆盖 , 总之写出的是一个新文件 ;
    FILE *p2 = fopen("D:\\c.txt", "w");

    char s = 0;
    while ((s = getc(p)) != EOF){
        // 字符自减
        s -= SEC;

        // 将读取到的数据写入到 p2 文件中
        putc(s, p2);
    }

    // 关闭文件
    fclose(p);
    fclose(p2);

    printf("Main End\n");
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

执行结果 :

b.txt 内容 :

FGHIJKLMNOPQRSTUVWXYZ[\]^_

  
 
  • 1

加密后的 c.txt 内容 :

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  
 
  • 1

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/117322454

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。