【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )

举报
韩曙亮 发表于 2022/01/10 23:45:08 2022/01/10
【摘要】 文章目录 一、从文件中读取多行文本二、文本文件加密三、文本文件解密 一、从文件中读取多行文本 首先 , 以读的方式打开文件 ; // 打开一个文件 , 以读的方式...





一、从文件中读取多行文本



首先 , 以读的方式打开文件 ;

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

  
 
  • 1
  • 2
  • 3

然后 , 调用 fgets 方法 , 从文件中读取数据 ;

char *fgets(char *str, int n, FILE *stream)

  
 
  • 1

char *str 参数 : 将文件中的文本读取到哪里去 ;

int n 参数 : 读取多少数据 , 单位字节 ;

FILE *stream 参数 : 读取哪个文件中的数据 ;


多行文本读取 : 通过 feop 函数判定是否读取到了文件结尾 , 如果已经读取到了文件结尾 , 则返回 true ;

int feof(FILE *stream)

  
 
  • 1

完整代码示例 :

#include <stdio.h>

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

    // 从命令行中接收字符串的数组
    char s[1024] = {0};
    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);
        // 打印读取的数据
        printf("%s", s);
    }

    // 关闭文件
    fclose(p);
    printf("Process Exit!");
    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

执行结果 :

在这里插入图片描述





二、文本文件加密



打开两个文件 , 从一个文件中读取文本 , 进行加密 , 然后再写出到另一个文件中 ;

以读的方式打开文件 :

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

  
 
  • 1
  • 2
  • 3

以写的方式打开文件 :

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

  
 
  • 1
  • 2
  • 3

加密文件 : 传入一个字符串指针 , 逐个遍历字符串中的字符 , 只要字符不为 ‘\0’ , 也就是 ASCII 码 0 值 , 就继续遍历 , 循环控制变量 *s 不为 0 即可 ; 加密操作就是将字符自增即可 ;

void encode(char* s)                         
{                                            
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历            
    while(*s){                               
        // 逐个遍历字符串中的字符                       
        (*s)++;                              
        // 指针自增, 遍历下一个字符                     
        s++;                                 
    }                                        
}                                            

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

读取文件 : 使用 fgets 方法读取文件中的字符串 , 读取当前位置到 ‘\n’ ;

// 字符串的数组            
char s[1024] = {0};  

// 读取文件到 s 数组中         
fgets(s, sizeof(s), p);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

写出文件 : 调用 fputs 方法 , 将字符串写出到文件中 ;

// 字符串的数组            
char s[1024] = {0};  

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

完整代码示例 :

#include <stdio.h>

void encode(char* s);

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

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

    // 字符串的数组
    char s[1024] = {0};

    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);

        // 加密操作
        encode(s);

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

        // 打印读取的数据
        printf("%s", s);
    }

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

    printf("Process Exit!");

    return 0;
}

void encode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)++;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

  
 
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

执行结果 :

在这里插入图片描述

加密后的结果 :

BCDEIfmmp!XpsmeDTEOHjuivc

  
 
  • 1

在这里插入图片描述





三、文本文件解密



打开两个文件 , 从一个文件中读取文本 , 进行解密 , 然后再写出到另一个文件中 ;

#include <stdio.h>

void encode(char* s);
void decode(char* s);

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

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

    // 字符串的数组
    char s[1024] = {0};

    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);

        // 解密操作
        decode(s);

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

        // 打印读取的数据
        printf("%s", s);
    }

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

    printf("Process Exit!");

    return 0;
}

void encode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)++;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

void decode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)--;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

  
 
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

运行结果 :

将 b.txt 中的文件进行解密 ;

在这里插入图片描述

解密过程 :

在这里插入图片描述

解密结果 :

ABCD
Hello World
CSDN
Github

  
 
  • 1
  • 2
  • 3
  • 4

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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