【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )
一、从文件中读取多行文本
首先 , 以读的方式打开文件 ;
// 打开一个文件 , 以读的方式
// 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
- 点赞
- 收藏
- 关注作者
评论(0)