typedef struct Stu
{
char name{50};
int id;
}Stu;
int main()
{
fputc('c',stdio); //字符输出到标准输出,此时没有缓冲区,缓冲区是针对普通文件的
char ch=fgetc(stdin);
fputc(stderr,"%c",ch); //标准错误输出,//stderr 通常也是指向屏幕的
FILE *fp=NULL;
//绝对路径、相对路径(./test.txt、../test.txt)
//直接运行可执行程序,相对路径是相对于可执行程序的
//字符串续行符:
/*
char *p="aacscscscsdscaxasca"\
"cscnsjcnkcskc";
*/ //表示一个字符串
// "w+",写读的方式打开。如果文件不存在,则创建文件;如果文件存在,则清空文件内容,再写
fp=fopen("文件路径/test.txt","w+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
//按字符写文件
char buf="cnsakcsccmdmaasx";
int i=0;
int n=strlen(buf);
for(i=0;i<n;i++)
{
int res=fputc(buf[i],fp); //返回值是成功写入文件的字符的 ASCII 码
//写完之后,会自动添加添加文件结束符
}
//文件关闭
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
//按字符读文件
FILE *fp=NULL;
//"r+",文件以读写方式打开,如果文件不存在,打开失败
fp=fopen("./test.txt","r+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
char ch;
while(ch=fgetc(fp)!=EOF) //等价于:while(!feof(fp)){ch=fgetc(fp);printf("%c",ch)}
{
printf("%c",ch);
}
printf("\n");
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
//按照行读写文件
FILE *fp=NULL;
fp=fopen("文件路径/test.txt","w+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
char *buf[]={"aaaaaaaaaa\n","ssssssssss\n","dddddddddd\n","ffffffffff\n"};
for(int i=0;i<4;i++)
{
int res=fputs(buff[i],fp); //返回值:0代表成功,非零代表失败
}
char rbuf[30]={0};
while(!feof(fp))
{
//sizeof(buf),表示最大读取的字节数。如果文件当行字节数大于sizeof(buf),则只读取前sizeof(buf);若文件件当行字节数小于sizeof(buf),则按照当行实际长度全部读取
//返回值是成功读取的文件内容
//读取的过程中,以 "\n"作为一行结束的标识
//fgets 读取完毕后,还自动在读取的字符串末尾添加字符串结束符
char *p=fgets(rbuf,sizeof(buf),fp);
printf("%s\n",rbuf);
}
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
//按照块写文件
FILE *fp=NULL;
fp=fopen("文件路径/test.txt","w+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
Stu s[3];
char buf[50];
for(int i=0;i<3;i++)
{
sprintf(buf,"stu%d%d%d",i,i,i);
strcpy(s[i].name,buf);
s[i].id=i+1;
}
//按块写文件
//s,写入文件的内容的首地址
//sizeof(Stu),按块写文件的单块的大小
//3,块数,写文件数据的大小:sizeof(Stu)*3
//fp,文件指针
//返回值:成功写入文件的块数
//fwrite 写入默认是按照二进制进行
int res=fwrite(s,sizeof(Stu),3,fp); //如果三块都写入成功,res=3
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
//按照块读文件
FILE *fp=NULL;
fp=fopen("文件路径/test.txt","r+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
Stu s[3];
char buf[50];
//按块读文件
//s,放文件内容的首地址
//sizeof(Stu),按块读文件的单块的大小
//3,块数,读文件数据的大小:sizeof(Stu)*3
//fp,文件指针
//返回值:成功读取文件的块数
//fread 读取默认是按照二进制进行
int ret=fread(s,sizeof(Stu),3,fp); //如果三块都读取成功,ret=3
for(int i=0;i<3;i++)
{
printf("%s %d\n",s[i].name,s[i].age);
}
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
// 按照格式化写文件
FILE *fp=NULL;
fp=fopen("文件路径/test.txt","w+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
printf("hello\n"); //等价于:fprintf(stdout,"hello");
fprintf(fp,"hello, I am pig,mike=%d\n",250); //文件中的内容:hello, I am pig,mike=250
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
//格式化读取文件
FILE *fp=NULL;
fp=fopen("文件路径/test.txt","w+");
if(fp==NULL)
{
perror("fopen"); //提示错误信息,字符串的内容会在错误信息前面输出,作为错误信息的标识
return -1;
}
//printf("hello\n"); //等价于:fprintf(stdout,"hello");
//fprintf(fp,"hello,I am pig,mike=%d\n",250); //文件中的内容:hello, I am pig,mike=250
int a=0;
fscanf(fp,"hello,I am pig,mike=%d\n",&a);
printf("%d\n",a); //250
if(fp!=NULL)
{
fclose(fp);
fp=NULL;
}
return 0;
}