读取文本文件
void main(){
// 打开文件 (文件名,模式)mode r(读) w(写) rb(作为二进制读) wb(作为二进制写)
// FILE *fopen( const char *filename, const char *mode );
char *file_name = "C:\\Users\\Administrator\\Desktop\\test.txt";
FILE * file=fopen(file_name, "r");
if (!file){
printf("文件打开失败");
exit(0);// 退出程序
}
char buffer[10];
//缓冲区buffer,长度10,文件指针
while (fgets(buffer, 10, file)){
printf("%s", buffer);
};
//关闭文件
fclose(file);
getchar();
}
文件的写入
void main(){
char* fileName = "C:\\Users\\Administrator\\Desktop\\test.txt";
FILE *file = fopen(fileName, "w");
if (!file){
printf("文件打开失败");
exit(0);// 退出程序
}
//会把原来的覆盖掉
fputs("我是威廉", file);
// 关闭文件
fclose(file);
getchar();
}
文件的拷贝
//文件的拷贝,当做二进制文件操作
void main(){
char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
char *fileCopyName = "C:\\Users\\Administrator\\Desktop\\image_copy.jpg";
FILE * file = fopen(file_name, "rb");
FILE * file_copy = fopen(fileCopyName, "wb");
if (!file||!file_copy){
printf("文件打开失败");
exit(0);// 退出程序
}
// size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
int buffer[512];
int len;
printf("%d", sizeof buffer);
while ((len=fread(buffer, sizeof(int), 512, file))!=0){
fwrite(buffer, sizeof(int), len, file_copy);
}
fclose(file);
fclose(file_copy);
getchar();
}
获取文件的大小
//获取文件的大小
void main(){
char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
FILE * file = fopen(file_name, "rb");
if (!file){
printf("文件打开失败");
exit(0);// 退出程序
}
//没有一个函数是可以直接拿文件的大小
//将文件的指针移动到最后,然后再计算偏移量
// 三个参数 SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
fseek(file, 0, SEEK_END);
// 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
long file_size = ftell(file);
printf("文件大小:%ld", file_size);
fclose(file);//953925
getchar();
}
文件加密
//文件加密
//图片服务器(使用第三方的),为防止图片泄密,图片进行加密
void main(){
char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
FILE * file = fopen(file_name, "rb");
FILE * file_encrpy = fopen(fileEncrpyName, "wb");
if (!file || !file_encrpy){
printf("文件打开失败");
exit(0);// 退出程序
}
//思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
// 10^5 异或 加密过程
// 1010 10
// ^0101 5
// 1111 加密
// 解密 同样的去异或 5
// 1111
// ^0101 5
// 1010 解密后 10
int c;
while ((c = fgetc(file)) != EOF){
fputc(c ^ 5, file_encrpy);
}
getchar();
}
文件解密
void main(){
char *fileEnName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
char *fileDeName = "C:\\Users\\Administrator\\Desktop\\image_dn.jpg";
FILE * file = fopen(fileEnName, "rb");
FILE * file_decrpy = fopen(fileDeName, "wb");
if (!file || !file_decrpy){
printf("文件打开失败");
exit(0);// 退出程序
}
//思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
// 10^5 异或 加密过程
// 1010 10
// ^0101 5
// 1111 加密
// 解密 同样的去异或 5
// 1111
// ^0101 5
// 1010 解密后 10
int c;
while ((c = fgetc(file)) != EOF){
fputc(c ^ 5, file_decrpy);
}
getchar();
}
字符串密码进行加密
void main(){
char *file_name = "C:\\Users\\Administrator\\Desktop\\image.jpg";
char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
FILE * file = fopen(file_name, "rb");
FILE * file_decrpy = fopen(fileEncrpyName, "wb");
if (!file || !file_decrpy){
printf("文件打开失败");
exit(0);// 退出程序
}
//思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
// 10^5 异或 加密过程
// 1010 10
// ^0101 5
// 1111 加密
// 解密 同样的去异或 5
// 1111
// ^0101 5
// 1010 解密后 10
int c;
char* password = "123456";//轮流进行异或操作
int index=0;
int pass_len = strlen(password);
while ((c = fgetc(file)) != EOF){
fputc(c ^password[index%pass_len], file_decrpy);
index++;
}
getchar();
}
对字符串密码进行解密
//对字符串密码进行解密
void main(){
char *file_name = "C:\\Users\\Administrator\\Desktop\\image_en.jpg";
char *fileEncrpyName = "C:\\Users\\Administrator\\Desktop\\image_dn.jpg";
FILE * file = fopen(file_name, "rb");
FILE * file_decrpy = fopen(fileEncrpyName, "wb");
if (!file || !file_decrpy){
printf("文件打开失败");
exit(0);// 退出程序
}
//思路:把每一个字节都拿出来,对每一个字节都处理或者把某部分字节拿出来,进行处理
// 10^5 异或 加密过程
// 1010 10
// ^0101 5
// 1111 加密
// 解密 同样的去异或 5
// 1111
// ^0101 5
// 1010 解密后 10
int c;
char* password = "123456";//轮流进行异或操作
int index = 0;
int pass_len = strlen(password);
while ((c = fgetc(file)) != EOF){
fputc(c ^password[index%pass_len], file_decrpy);
index++;
}
getchar();
}
文件的切割
int getFileSize(char* fileName){
FILE * file = fopen(fileName, "rb");
if (!file){
exit(0);// 退出程序
}
//没有一个函数是可以直接拿文件的大小
//将文件的指针移动到最后,然后再计算偏移量
// 三个参数 SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
fseek(file, 0, SEEK_END);
// 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
long file_size = ftell(file);
printf("文件大小:%ld", file_size);
fclose(file);//953925
return file_size;
}
// 文件的切割,思路类似于断点下载
void main(){
char *fileName = "C:\\Users\\Administrator\\Desktop\\image.jpg";
FILE* file = fopen(fileName, "rb");
//获取文件的大小
int file_size = getFileSize(fileName);
// 定义 切多少,计算大小,指定文件名
int file_number = 3;
// 二维数组,char[]== char*
// image_0.jpg
// image_1.jpg
// image_2.jpg
// 一位数组:char* file_name
// char*
char **file_names = (char**)malloc(sizeof(char*)*file_number);
//每一段的大小
int preFileSize = file_size / file_number;
//进行复制
int i = 0;
for (; i < 3; i++){
file_names[i] = (char*)malloc(sizeof(char)* 100);// '\0'
sprintf(file_names[i], "C:\\Users\\Administrator\\Desktop\\image_%d.jpg", i);
printf("%s\n", file_names[i]);
}
i = 0;
for (; i < file_number; i++){
// 从源文件中往切割文件写入数据
FILE* cur_file = fopen(file_names[i], "wb");
//写多少
int start = i*preFileSize;
int end = (i + 1)*preFileSize;
for (int j = start; j < end; j++){
fputc(fgetc(file), cur_file);
}
fclose(cur_file);
free(file_names[i]);
}
fclose(file);
free(file_names);
getchar();
}
文件的合并
int getFileSize(char* fileName){
FILE * file = fopen(fileName, "rb");
if (!file){
exit(0);// 退出程序
}
//没有一个函数是可以直接拿文件的大小
//将文件的指针移动到最后,然后再计算偏移量
// 三个参数 SEEK_SET(开头), SEEK_CUR(当前), SEEK_END(移动到最后)
fseek(file, 0, SEEK_END);
// 计算偏移的位置,ftell 从 0 开始统计到当前(SEEK_END)
long file_size = ftell(file);
printf("文件大小:%ld", file_size);
fclose(file);//953925
return file_size;
}
void main(){
char *fileName0 = "C:\\Users\\Administrator\\Desktop\\image_0.jpg";
char *fileName1 = "C:\\Users\\Administrator\\Desktop\\image_1.jpg";
char *fileName2 = "C:\\Users\\Administrator\\Desktop\\image_2.jpg";
char *fileName = "C:\\Users\\Administrator\\Desktop\\image_bc.jpg";
FILE* file0 = fopen(fileName0, "rb");
FILE* file1 = fopen(fileName1, "rb");
FILE* file2 = fopen(fileName2, "rb");
FILE* file = fopen(fileName, "wb");
//获取文件的大小
int file_size0 = getFileSize(fileName0);//317975
int file_size1 = getFileSize(fileName1);
int file_size2 = getFileSize(fileName2);
// 定义 切多少,计算大小,指定文件名
//进行复制
int i = 0;
for (int start = 0; i < file_size0; i++){
fputc(fgetc(file0), file);
}
for (int j = file_size0; j < file_size0 + file_size1; j++){
fputc(fgetc(file1), file);
}
for (int z = file_size0 + file_size1; z < file_size0 + file_size1 + file_size2; z++){
fputc(fgetc(file2), file);
}
getchar();
}
网友评论