C语言——文件操作

news/2024/11/7 21:25:41/

C语言——文件操作

1.文件拷贝

#include<stdio.h>int main(int argc,char** argv)
{FILE *src=NULL;FILE *new=NULL;int n_read=0;unsigned char buf[1024]={0};src=fopen("./file","r+");if(src==NULL){printf("文件打开失败\n"); return -1;}new=fopen("./file1","w+");if(new==NULL){printf("文件打开失败\n");return -1;}while(!feof(src)){n_read=fread(buf,1,sizeof(buf),src);fwrite(buf,1,n_read,new);}fclose(src);fclose(new);printf("文件拷贝成功\n");return 0; 
}

2.文件加解密实现

2.1.实现方式一:

#include<stdio.h>void eneryFile(char* file1,char* file2,int key)
{FILE* fp1=fopen(file1,"r+");FILE* fp2=fopen(file2,"w+");int   data=0;int   n_read=0;while(!feof(fp1)){n_read=fread(&data,1,sizeof(int),fp1);data=data^key;fwrite(&data,1,n_read,fp2);}fclose(fp1);fclose(fp2);
}void deneryFile(char* file1,char* file2,int key)
{eneryFile(file1,file2,key);
}void printListInfo()
{printf("\n--------------菜单----------------\n");printf("1. 加密\n");printf("2. 解密\n");printf("请选择功能序号:");
}int main(int argc,char** argv)
{char* src_file="./file";char* new_file="./file1";char* new2_file="./file2";int key=123;int number=0;while(1){printListInfo();scanf("%d",&number);switch(number){case 1:eneryFile(src_file,new_file,key);break;case 2:deneryFile(new_file,new2_file,key);break; default:printf("输入错误\n");break;         }} return 0;
}

3.fread

#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main(int argc,char** argv)
{FILE* file=NULL;int ret=0;char buf[100]={0};file=fopen("./text","r+");if(file==NULL){printf("open file failed\n");return -1;}//fseek(file,0,SEEK_SET);ret=fread(buf,1,sizeof(buf),file);if(ret!=-1){printf("read file success\n");printf("buf=%s\n",buf);return -1;}fclose(file);return 0;
}

4.fwrite

#include<stdio.h>
#include<string.h>int main(int argc,char** argv)
{int i=0;for(i=0;i<argc;i++){printf("argc[%d]=%s\n",i,argv[i]);}FILE *file=NULL;char *buf="xiewenhui";int ret=0;file=fopen("./text","w+");if(file==NULL){printf("open file error\n");return -1;        }ret=fwrite(buf,1,strlen(buf),file);if(ret==-1){printf("write failed\n");return -1;}fclose(file);return 0;
}

5.写入结构体到链表

void saveLink(Node* head)
{FILE *fp=NULL;Node* p=head;Node* new=(Node*)malloc(sizeof(Node));new->next=NULL;fp=fopen("./text.txt","w+");if(fp==NULL){printf("file open failed\n");return;}while(p->next!=NULL){fwrite(p,sizeof(Node),1,fp);p=p->next;}fclose(fp);
}

6.写入数据到结构体

#include<stdio.h>typedef struct Test  
{int a;int b;char c[100];
}Demo;int main(int argc,char **argv)
{Demo stu={888,666,"xie"};FILE *file=NULL;int   ret=0;file=fopen("./text","w+");if(file==NULL){printf("文件打开失败\n");return -1;}ret=fwrite(&stu,sizeof(Demo),1,file);if(ret==1){printf("写入成功:%d\n",ret);return -1;}fclose(file);return 0;
}

7.从结构体中读取数据

#include<stdio.h>struct Test 
{int a;int b;char c[100];
};int main(int argc,char** argv)
{FILE *file=NULL;int ret=0;struct  Test data={0};file=fopen("./text","r+");if(file==NULL){printf("文件写入失败\n");return -1;}ret=fread(&data,sizeof(struct Test),1,file);if(ret==1){printf("读取成功:%d,%d,%s\n",ret,data.a,data.b,data.c);return -1;}return  0;
}

8.文件读写链表

尾插法

#include<stdio.h>
#include<stdlib.h>typedef struct  Test 
{int data;struct Test *next;
}Node;Node* insertListNode(Node* head)
{Node* p=head;Node* new=NULL;int i=0;for(i=0;i<5;i++){new=(Node*)malloc(sizeof(Node));new->next=NULL;printf("please input %d data\n",i+1);scanf("%d",&(new->data));if(head==NULL){head=new;}while(p->next!=NULL){p=p->next;}p->next=new;}return head;
}void saveListNode(Node* head)
{FILE *fp=NULL;Node* p=head;int  n_write=0;fp=fopen("./file","w+");if(fp==NULL){printf("open file failed\n");return;}while(p->next!=NULL){n_write=fwrite(p,sizeof(Node),1,fp);if(n_write==-1){printf("write file failed\n");}p=p->next;}fclose(fp);
}void readListNode(Node* head)
{FILE* fp=NULL;Node* p=head->next;int n_read=0;fp=fopen("./file","r+");if(fp==NULL){printf("open file failed\n");return;}while(p!=NULL){n_read=fread(&p->data,sizeof(Node),1,fp);if(n_read!=-1){printf("%d ",p->data);}p=p->next;}putchar('\n');fclose(fp);
}int main(int argc,char** argv)
{Node* head=(Node*)malloc(sizeof(Node));head=insertListNode(head);saveListNode(head);readListNode(head);return 0;
}

头插法

#include<stdio.h>
#include<stdlib.h>typedef struct Test
{int data;struct Test *next;
}Node;Node* insertListNode(Node* head)
{Node* p=head;Node* new=NULL;int i=0;for(i=0;i<5;i++){new=(Node*)malloc(sizeof(Node));new->next=NULL;printf("please input NO.%d number\n",i+1);scanf("%d",&(new->data));if(head==NULL){head=new;}else{new->next=head;head=new;}}return head;
}void saveListNode(Node* head)
{Node* p=head;FILE* fp=NULL;int n_write=0;fp=fopen("./file1","w+");if(fp==NULL){printf("open file failed\n");return;}while(p!=NULL){n_write=fwrite(p,sizeof(Node),1,fp);if(n_write==-1){printf("write file failed\n");return;}p=p->next;}fclose(fp);
}void readListNode(Node* head)
{Node* p=head;FILE* fp=NULL;int n_read=0;fp=fopen("./file1","r+");if(fp==NULL){printf("open  file failed\n");return;}while(p!=NULL){n_read=fread(&p->data,sizeof(Node),1,fp);if(n_read!=-1){printf("%d ",p->data);}p=p->next;}putchar('\n');fclose(fp);     
}int main(int argc,char** argv)
{ Node* head=NULL;head=insertListNode(head);saveListNode(head);readListNode(head);return 0;
}

http://www.ppmy.cn/news/1241496.html

相关文章

openssl+ ECC + linux 签名校验开发实例(C++)

文章目录 ECC签名过程&#xff08;ECDSA签名&#xff09;ECC验证过程&#xff08;ECDSA验证&#xff09;C示例代码 ECC&#xff08;Elliptic Curve Cryptography&#xff09;是一种基于椭圆曲线数学结构的密码学技术。在ECC中&#xff0c;签名和验证过程使用的是数字签名算法&a…

C#面试问题整理

sqlserver中视图和表的区别 在 SQL Server 中&#xff0c;视图&#xff08;View&#xff09;和表&#xff08;Table&#xff09;是不同的对象&#xff0c;它们有以下几点区别&#xff1a; 数据存储方式&#xff1a;表是一种实际存储数据的数据库对象&#xff0c;它包含列和行&…

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于Ansible开发的&#xff0c;自动化部署及扩容openGauss的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署多种…

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中&#xff0c;我们经常会遇到需要抠图的情况&#xff0c;无论是为了美化照片、制作海报&#xff0c;还是进行图片合成。抠图对于我们来说也是一种很常用的功能了&#xff0c;今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

nodejs+vue+python+PHP+微信小程序-健身俱乐部在线管理平台的设计与实现-安卓-计算机毕业设计

随着经济的发展、财富的累积&#xff0c;人们生活水平、生活质量大幅度提高&#xff0c;生活环境得到明显改善&#xff0c;但是竞争激烈、人们生活压力大、生活节奏快加上饮食习惯和生活方式不合理导致国内 亚健康人群逐年增多。统计数据表明当前我国亚健康人群比例已经超过了7…

【数据库篇】关系模式的表示——(2)规范化

范式&#xff1a;范式是符合某一种级别的关系模式的集合 规范化&#xff1a;是指一个低一级的范式的关系模式&#xff0c;通过模式的分解转换为若干个高一级范式的关系模式的集合。 1NF 每个分量必须是不可分开的数据项&#xff0c;满足这个条件的关系模式就是1NF。 2NF 若…

makefile 学习(5)完整的makefile模板

参考自&#xff1a; (1&#xff09;深度学习部署笔记(二): g, makefile语法&#xff0c;makefile自己的CUDA编程模板(2&#xff09;https://zhuanlan.zhihu.com/p/396448133(3) 一个挺好的工程模板&#xff0c;(https://github.com/shouxieai/cpp-proj-template) 1. c 编译流…

【LeeCode】844.比较含退格的字符串

给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 解&#xff1a;同时从后向前遍历S和T&#xff08;i初始为…