文件相关
1、文件的读取
#include
#include // 文件的操作,是在这个头文件里面的
#include
int main() {
// fopen打开文件的意思(参数1:文件路径 文件源, 参数2:模式 r(读) w(写) rb(作为二进制文件读) rw(作为二进制文件写) 返回值 FILE 结构体)
// FILE * fopen (const char *, const char *);
char * fileNameStr = "D:\\Temp\\DerryFile.txt";
// 既然是使用了r,你要提前准备好文件
FILE * file = fopen(fileNameStr, "r");
if (!file) {
printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
exit(0); // 退出程序
}
// 先定义缓存区域 (容器)
char buffer[10];
// 1.缓冲区buffer, 2:长度10, 3:文件指针变量
while (fgets(buffer, 10, file)) {
printf("%s", buffer);
}
// 关闭文件
fclose(file);
return 0;
}
2、文件的写入
#include
#include // 文件的操作,是在这个头文件里面的
#include
int main() {
// fopen打开文件的意思(参数1:文件路径 文件源, 参数2:模式 r(读) w(写) rb(作为二进制文件读) wb(作为二进制文件写) 返回值 FILE 结构体)
// FILE * fopen (const char *, const char *);
char * fileNameStr = "D:\\Temp\\DerryFileW.txt";
// 既然是使用了w,他会自动生成文件 0kb
FILE * file = fopen(fileNameStr, "w");
if (!file) {
printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
exit(0); // 退出程序
}
fputs("Derry Success run...", file);
// 关闭文件
fclose(file);
return 0;
}
3、文件的复制
#include
#include
#include
int main() {
char *fileName = "E:\\enjoy\\FileTest.txt"; //源文件
char *fileNameCopy = "E:\\enjoy\\FileTestCopy.txt";//目标文件
//rb读取二进制文件
FILE *file = fopen(fileName, "rb");
//wb 写入二进制文件
FILE *fileCopy = fopen(fileNameCopy, "wb");
if (!file || !fileCopy) {
printf("文件路径有问题,请检查");
exit(0);
}
char buffer[512];
int len; //每次读取的长度
// fread:参数1:容器buffer, 参数2:每次偏移多少 int, 参数3:容器大小
while ((len = fread(buffer, sizeof(int), sizeof(buffer) / sizeof(int), file))) {
fwrite(buffer, sizeof(int), len, fileCopy);
}
fclose(file);
fclose(fileCopy);
return 0;
}
4、文件的大小获取
#include
#include
#include
int main() {
// 没有专门的 文件大小获取 API,
// (思路:)读取头指针 头指针挪动位置,挪动到最后,就可以求得文件大小
char * fileNameStr = "D:\\Temp\\DerryFile.txt"; // 来源
// 既然是使用了w,他会自动生成文件 0kb
FILE * file = fopen(fileNameStr, "rb"); // file == 指针
if (!file) {
printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
exit(0); // 退出程序
}
// 都是操作指针来玩的
// SEEK_SET(开头) SEEK_CUR(当前) SEEK_END(结尾)
fseek(file, 0, SEEK_END);
// 走到这里之后:file有了更丰富的值,给你的file指针赋值,挪动的记录信息
// 读取 刚刚给file赋值的记录信息
// 其实此函数目的是:计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
long file_size = ftell(file);
printf("%s文件的字节大小是:%ld\n", fileNameStr, file_size);
// 关闭文件
fclose(file);
return 0;
}
5、文件的加密解密
//【文件的加密,使用密钥】
#include
#include
#include
int main() {
char *fileNameStr = "D:\\Temp\\IMG.jpg"; // 来源
char * fileNameStrEncode = "D:\\Temp\\IMG_encode.jpg"; // 加密后的目标文件
// 密钥
char * password = "123456"; // 我现在做的事情:我的密钥 必须生效
FILE * file = fopen(fileNameStr, "rb"); // r 必须字节提前准备好文件
FILE * fileEncode = fopen(fileNameStrEncode, "wb"); // w 创建一个0kb的文件
if (!file || !fileEncode) {
printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
exit(0); // 退出程序
}
int c;
int index = 0;
int pass_len = strlen(password);
// fgetc(文件指针) 返回值 EOF = end fo file
while ((c = fgetc(file)) != EOF) {
char item = password[index%pass_len];
// 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 ...
printf("item:%c%\n", item);
fputc(c ^ item, fileEncode);
index ++;
}
// 关闭文件
fclose(file);
fclose(fileEncode);
}
// TODO 【文件的解密,使用密钥】
#include
#include
#include
int main() {
char * fileNameStr = "D:\\Temp\\IMG_encode.jpg"; // 来源
char * fileNameStrDecode = "D:\\Temp\\IMG_decode.jpg"; // 解密后的目标文件
FILE * file = fopen(fileNameStr, "rb"); // r 必须字节提前准备好文件
FILE * fileDecode = fopen(fileNameStrDecode, "wb"); // w 创建一个0kb的文件
if (!file || !fileDecode) {
printf("文件打开失败,请你个货检测:路径为%s路径的文件,看看有什么问题\n", fileNameStr);
exit(0); // 退出程序
}
// 密钥
char * password = "123456"; // 我现在做的事情:我的密钥 必须生效
int c;
int index = 0;
int pass_len = strlen(password);
while ((c = fgetc(file)) != EOF) {
fputc(c ^ password[index%pass_len], fileDecode);
index++;
}
fclose(file);
fclose(fileDecode);
return 0;
}