文件的使用详解

Posted 萌新的日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的使用详解相关的知识,希望对你有一定的参考价值。

(文章目录)

一、文件的分类

二、文件的打开和关闭

1.文件指针

2.文件打开

(1).文件打开方式

2.文件关闭

#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","w");//打开文件
 if(pf==NULL)//文件打开失败就报错
 
 perror("fopen");
 return 1;
 
 fclose(pf);//关闭文件
 pf=NULL;
 return 0;
 
 

三、文件的顺序读写

1.字符输出函数——fputc

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","w");//打开text.txt文件 以写的方式
 if(pf==NULL)//判断文件是否打开失败
 
 perror("fopen");
 return 1;
 
 fputc(a,pf);//将字符传递到流中
 foutc(b,pf);
 fputc(c,pf);
 fclose(pf);//关闭文件
 pf=NULL;
 return 0;
 

2.字符输入函数——fgetc

#define _CRT_SECURE_NO_WARNINGS//在VS中关闭文件所要求的
#include<stdio.h>
int main()

 FILE*pf=fopen("test.txt","r");//从文件test.txt中读
 if(pf==NULL)//假设test.txt里面为abcd
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
  ret=fgetc(pf);
 printf("%c\\n",ret);//b
  ret=fgetc(pf);
 printf("%c\\n",ret);//c
 fclose(pf);
 pf=NULL;
 return 0;

 

3.文本行输出函数——fputs

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

FILE*pf=fopen("text.txt","w");
if(pf==NULL)

perror("fopen");
return 1;

fputs("abcdef\\n",pf);
fputs("qwerty\\n",pf);
fclose(pf);
pf=NULL;
return 0;

4.文本行输入函数——fgets

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

FILE*pf=fopen("text.txt","r");//假设文件中为abcdefg
if(pf==NULL)

perror("fopen");
return 1;

char arr[40=0;
fgets(arr,4,pf);
printf("%s\\n",arr);//a b c
fgets(arr,4,pf);
printf("%s\\n",arr);// d e f
 fclose(pf);
pf=NULL;
return 0;

5.格式化输出函数——fprintf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S

 char name[20];
 int age;
 char sex[20];

int main()

struct S s="张三",18,"男");
FILE*pf=fopen("test.txt","w");
if(pf==NULL)

perror("fopen");
return 1;

fprintf(pf,"%s %d %s",s.name,s.age,s.sex);
fclose(pf);
pf=NULL;
return 0;


 

6.格式化输入函数——fscanf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S

 char name[20];
 int age;
 char sex[20];

int main()

struct S s="张三",18,"男");
FILE*pf=fopen("test.txt","r");
if(pf==NULL)

perror("fopen");
return 1;

fscanf(pf,"%s %d %s",s.name,&(s.age),s.sex);//读文件
printf("%s %d %s\\n",s.name,s.age,s.sex);//打印
fclose(pf);
pf=NULL;
return 0;

7.二进制输出函数———fwrite

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S

 char name[20];
 int age;
 char sex[20];

int main()

struct S s="张三",18,"男");
FILE*pf=fopen("test.txt","w");
if(pf==NULL)

perror("fopen");
return 1;

fwirte(&s,sizeof(struct S),1,pf);
fclose(pf);
pf=NULL;
return 0;

7.二进制输入函数———fread

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct S

 char name[20];
 int age;
 char sex[20];

int main()

struct S s="张三",18,"男");
FILE*pf=fopen("test.txt","r");//读文件
if(pf==NULL)

perror("fopen");
return 1;

fread(&s,sizeof(struct S),1,pf);
printf("%s" "%d" "%s",s.name,s.age,s.sex);打印
fclose(pf);
pf=NULL;
return 0;

三、文件的随机读写

1.fseek

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","r");//这里是从已经存好数据的文件中读
 if(pf==NULL)//假设文件中为abcdef
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fseek(pf,-2,SEEK_END);
 ret=fgetc(pf);
 printf("%c\\n",ret);//e
  ret=fgetc(pf);
 printf("%c\\n",ret);//f
 fclose(pf);
 pf=NULL;
 return 0;
 
 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","r");//这里是从已经存好数据的文件中读
 if(pf==NULL)//假设文件中为abcdef
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fseek(pf,2,SEEK_SET);
 ret=fgetc(pf);
 printf("%c\\n",ret);//c
  ret=fgetc(pf);
 printf("%c\\n",ret);//d
 fclose(pff);
 pf=NULL;
 return 0;
 
 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","r");//这里是从已经存好数据的文件中读
 if(pf==NULL)//假设文件中为abcdef
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fseek(pf,2,SEEK_CUR);//来到这里时已经指向b的流 所以从b开始向后2个
 ret=fgetc(pf);
 printf("%c\\n",ret);//d
  ret=fgetc(pf);
 printf("%c\\n",ret);//e
 fclose(pf);
 pf=NULL;
 return 0;
 

2.ftell

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","r");//这里是从已经存好数据的文件中读
 if(pf==NULL)//假设文件中为abcdef
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fseek(pf,-1,SEEK_END);
 ret=fgetc(pf);//f
 printf("%c\\n",ret);//相对于起始位置的偏移量为5
 fclose(pf);
 pf=NULL;
 return 0;
 

3.rewind

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()

 FILE*pf=fopen("text.txt","r");//这里是从已经存好数据的文件中读
 if(pf==NULL)//假设文件中为abcdef
 
 perror("fopen");
 return 1;
 
 int ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fseek(pf,-1,SEEK_END);
 rewind(pf);//文件指针回到起始位置
 ret=fgetc(pf);
 printf("%c\\n",ret);//a
 fclose(pf);
 pf=NULL;
 return 0;
 

四.文件读取的判定

以上是关于文件的使用详解的主要内容,如果未能解决你的问题,请参考以下文章

线程同步与互斥详解

tail命令详解

Lazy Writer&CheckPoint

java 多线程怎么深入?

什么时候应该使用临界区?

recovery.conf文件详解