文件的操作,读、写、关闭:
操作文件步骤 :
1、打开 fopen("路径","操作方式");
操作方式 :
rb:以只读打开,如果文件不存在,则打开失败
rb+ 以读写打开,如果文件不存在,则打开失败
wb 以只写打开,如果文件不存在,则创建,否则截断
wb+ 以读写打开,如果文件不存在,则创建,否则截断
ab 读写以追加打开
ab+
2、操作(读注:读,写)
fread(void* ptr, size_t size, size_t nmemb,
FILE *stream)
返回:读取的实际次数
size_t fwrite(void* ptr, size_t size, size_t nmemb,
FILE *stream);
ptr:数据的首地址
size:一次写入的长度
nmemb:写入的次数
stream:文件
返回:写入的实际次数
3、关闭
fclose();
#include<stdio.h>
struct msg
{
int id;
char name[10];
};
void main()
{
//1文件操作步骤: 只写打开:
FILE*fp =fopen("./data","wb");
if(NULL==fp)
{
printf("打开失败\n");
return ;
}
//2操作
//将信息写入到文件:二进制
/*
int a[10]={100,200,300,400,500,600,700,800,900,1000};
int ilen=fwrite(&a,4,10,fp);//写的长度:每次写入的长度*次数
printf("%d\n",ilen);
*/
/*
char buf[100]="helloworld";//[105][101][101]
fwrite(buf,1,10,fp); //1Byte*10次=10Byte
*/
struct msg m={1001,"lifei"};
fwrite(&m,1,sizeof(struct msg),fp);
//3关闭
fclose(fp);
}
文件的操作:拷贝:
#include<stdio.h>
#include<errno.h>
#include<string.h>
//copy拷贝:将源文件 拷贝 目标地
//cp 源文件 目标文件
void main(int argc,char* argv[])
{
if(argc<3)
{
printf("cp:缺少文件操作数\n");
return ;
}
//1打开文件
FILE* rfp=fopen(argv[1],"rb");//打开文件:以只读打开
//判断
if(NULL==rfp)
{
//没有定义sys_errlist的指针数组 和errno ,在定义在errno.h中
fprintf(stderr,"copy无法获取%s的文件状态(stat):%s\n",argv[1],strerror(errno));
return;
}
//创建目标文件:如果存在,则截断,不存在则创建
FILE* wfp=fopen(argv[2],"wb");//打开文件:文件不存在,则创建,否则截断
if(NULL==wfp)
{
fprintf(stderr,"copy:无法创建普通文件%s:%s\n",argv[2],strerror(errno));
return;
}
//2操作文件----拷贝文件 将argv[1]的文件 拷贝给argv[2]
int ilen=0;
char buf[1000]="";//定义漏斗(存储从源文件中读取的内容)
while((ilen=fread(buf,1,1000,rfp))>0) //读取文件
{
//printf("%d\n",ilen);
fwrite(buf,1,ilen,wfp);//存放时,必须存放的容量与取出来的容量一致
}
//3关闭文件
fclose(rfp);
fclose(wfp);
}