//1.读写文本文件
1
#define _CRT_SECURE_NO_WARNINGS
2
#include<stdio.h>
3
#include<stdlib.h>
4
5
void main() {
6
//文件路径
7
char* path = "E:\\testc\\test.txt";
8
char* path_new = "E:\\testc\\test_new.txt";
9
10
//打开文件,返回文件的指针
11
FILE* f_read = fopen(path,"r");
12
FILE* f_write = fopen(path_new,"w");
13
//文件是否成功打开
14
if (f_read==NULL||f_write==NULL) {
15
printf("文件打开失败");
16
return;
17
}
18
19
//读取文件
20
char buff[50];//缓冲区
21
while (fgets(buff,50,f_read)) {
22
//写文件
23
fputs(buff,f_write);
24
}
25
//关闭文件
26
fclose(f_read);
27
fclose(f_write);
28
29
getchar();
30
}
//2.读写二进制文件
//C读写文本文件与二进制文件的差别仅仅体现在回车换行符
//1.写文本时,每遇到一个'\n',会将其转换成'\r\n'(回车换行)
//2.读文本时,每遇到一个'\r\n',会将其转换成'\n'
//3.但是读写二进制文件的例子(图片的复制)
1
#define _CRT_SECURE_NO_WARNINGS
2
#include<stdio.h>
3
#include<stdlib.h>
4
void main() {
5
//文件路径
6
char* path = "E:\\testc\\down.png";
7
char* path_new = "E:\\testc\\down_new.png";
8
9
//打开文件,返回文件指针,b代表是二进制的文件
10
FILE* f_read = fopen(path,"rb");
11
FILE* f_write = fopen(path_new, "rw");
12
//文件是否打开成功
13
if (f_read==NULL||f_write==NULL) {
14
printf("文件打开失败");
15
return;
16
}
17
//读取文件
18
//缓冲区,注意读写二进制文件的时候,是用int类型的缓冲区
19
int buff[50];
20
//每次读取的长度
21
int len = 0;
22
//读到的内容放到缓冲区,缓冲区的单位大小(一个缓冲区大小读50个int的大小(4个字节)的数据)
23
//也就是一次读50*4 200字节的数据
24
//返回的len 是读取到的长度,小于等于50
25
while ((len = fread(buff, sizeof(int), 50, f_read)) != 0) {
26
//写文件
27
fwrite(buff, sizeof(int), len, f_write);
28
}
29
30
//关闭文件
31
fclose(f_read);
32
fclose(f_write);
33
getchar();
34
}
//获取文件大小
//函数一 fseek
//函数二 ftell
1
#define _CRT_SECURE_NO_WARNINGS
2
#include<stdio.h>
3
#include<stdlib.h>
4
5
void main() {
6
//文件路径
7
char* path = "E:\\testc\\down.png";
8
//读取文件
9
FILE* f_read = fopen(path,"rb");
10
//判断文件是否成功打开
11
if (f_read==NULL)
12
{
13
printf("文件打开失败");
14
return;
15
}
16
//类似于多线程下载的概念,首先将文件长度按N段划分,然后将每段文件读取并写入到相应的临时文件
17
//SEEK_END 到文件的结尾
18
//0L 代表向前偏移几个字节
19
fseek(f_read,0L,SEEK_END);
20
//返回当前的文件指针相当于文件开头的位移量
21
long len = ftell(f_read);
22
printf("%ld",len);
23
//关闭文件
24
fclose(f_read);
25
26
getchar();
27
}
//文件加密
//用简单的异或运算进行加密,解密的话就是一个逆向过程
//规则:1^1=0,0^0=0,0^1=1,1^0=1 同为0,不同为1
1
#define _CRT_SECURE_NO_WARNINGS
2
#include<stdio.h>
3
#include<stdlib.h>
4
5
void crpypt(char* filePath,char* crpyptFilePath) {
6
//打开文件
7
FILE* f_read = fopen(filePath,"r");
8
FILE* f_write = fopen(crpyptFilePath, "w");
9
if (f_read==NULL||f_write==NULL)
10
{
11
printf("文件打开失败");
12
return;
13
}
14
int ch;//一次读取一个字符,每一个字符都是一个数据,用int来表示
15
while ((ch = fgetc(f_read))!=EOF)
16
{
17
fputc(ch^9,f_write);
18
}
19
20
//关闭文件
21
fclose(f_read);
22
fclose(f_write);
23
}
24
25
void main() {
26
//文件路径
27
char* path = "E:\\testc\\test.txt";
28
char* path_crpypt = "E:\\testc\\test_crpypt.txt";
29
char* path_decrpypt = "E:\\testc\\test_decrpypt.txt";
30
31
//文件加密
32
crpypt(path,path_crpypt);
33
//文件解密decrpypt,是一个逆过程,注意先把原来的文件删除
34
crpypt(path_crpypt,path_decrpypt);
35
getchar();
36
}
//二进制文件加密
//读取二进制文件中的数据时,一个一个字符读取
//密码 password
1
#define _CRT_SECURE_NO_WARNINGS
2
#include<stdio.h>
3
#include<stdlib.h>
4
5
void crpypt(char* normal_path, char* crpypt_path,char password[]) {
6
//打开文件
7
FILE* normal_fp = fopen(normal_path,"rb");
8
FILE* crpypt_fp = fopen(crpypt_path, "wb");
9
//一次读取一个字符
10
int ch;
11
//循环使用密码中的字母进行异或运算
12
int i = 0;
13
//密码的长度
14
int pwd_len = strlen(password);
15
while ((ch=fgetc(normal_fp))!=EOF) //end of file
16
{
17
//写入(异或运算)
18
fputc(ch^password[i%pwd_len],crpypt_fp);
19
i++;
20
}
21
//关闭文件
22
fclose(normal_fp);
23
fclose(crpypt_fp);
24
}
25
26
void main(){
27
//文件路径
28
char* path = "E:\\testc\\down.png";
29
char* path_crpypt = "E:\\testc\\down_crpypt.png";
30
char* path_decrpypt = "E:\\testc\\down_decrpypt.png";
31
//加密文件
32
crpypt(path,path_crpypt,"boomjia");
33
//解密文件
34
crpypt(path_crpypt, path_decrpypt, "boomjia");
35
getchar();
36
}
总结:
1.普通的:fopen(
path,"r"
) fclose(f_read)
fopen(
path,"w"
) fclose(f_write)
二进制:
fopen(
path,"rb"
) fclose(f_read)
fopen(
path,"wb"
) fclose(
f_write
)
2.FILE* fp 返回的是文件指针
3.fgets() fputs()
4.fgetc() fputc()
5.buff 缓冲区
6.fread函数 fread(buff, sizeof(int), 50, f_read)
7.fwrite函数 fwrite(buff, sizeof(int), len, f_write)