4.5 KiB
4.5 KiB
title, date, tags, categories, thumbnail
| title | date | tags | categories | thumbnail | ||
|---|---|---|---|---|---|---|
| C语言-5 | 2022-12-20 20:02 |
|
笔记 | https://t.alcy.cc/fj |
打开与关闭文件
1、用fopen打开文件
-
fopen(文件名,使用文件方式)
fopen("D:\\date\\Mystudio\\demo.txt","r+"); fopen("D:/date/Mystudio/demo.txt","r+"); //绝对路径 -
fopen函数的返回值是只要操作文件(demo.txt)的指针,若出错,将返回一个空指针(NULL)。
-
因此,一般是将fopen函数返回值赋给一个指向文件的指针变量。
FILE *fp; //定义一个文件指针 //打开一个文件,"r+"表示可读可写的模式打开 fp = fopen("D\\date\\Mystudio\\demo.txt","r+"); if(fp==NULL) printf("文件demo打开失败"); else printf("文件demo打开成功"); fclose(fp); //关闭文件
2、用fclose关闭文件
-
fclose(文件指针);
fclose(fp); -
如不关闭文件就结束程序可能会丢失数据。
-
fclose函数也会返回一个值,当成功执行了关闭为文件操做,返回值为0,否则返回EOF(-1);
顺序读写数据文件
向文件读写字符
1、fgetc(fp) 从fp指向的文件读入一个字符
-
读成功则返回所读的字符,失败则返回u文件结束标志EOF(-1);
char c=fgetc(fc);
2、fputc(ch.fp); 把字符ch写道文件指针变量fp所指向的文件中
- 输出成功,则返回值就是输出的字符,失败就会返回EOF(-1);
3、feof(fp)函数用来判断文件是否结束
- 如果遇到文件结束,函数feo(fp)的值为非零值,否则为0
char c;
c = fuputc(ch.fp)
while(!feof(fp))
{
printf("%c",c);
c = fputc(ch,fp);
}
//输出文件中的所有字符
向文件读写字符串
1、fgets(str,n,fp)从fp指向的文件读如一个长度为(n-1)的字符串
- 读成功则返回地址str,否则返回NULL;
FILE *fp;
char c[15];
fp = fopen("D:/date/Mystudio/demo.txt","r+");
fgets(c,15,fp);
print("%s",c);
2、fputs(str,fp)把str指向的字符串写道文件指针变量fp所指向的文件中
-
输出成功则返回 0 ,否则返回非0值
FILE *fp; char c[15]={"Hello Linux."}; fp = fopen("d/date/Mystdio/demo.txt","r+"); fputs(c,fp);
用格式化方式读写文本
fprint(文件指针,格式字符串,输出列表)格式化输出字符
FILE *fp;
fp = fopen("D;/date/Mystudio/demo.txt","r+");
int i =5;
float f = 6.5;
fprint(fp,"i = %d,f = %6.2f",i,f);
2、fcanf(文件指针,格式字符串,输出列表)格式化读入字符
FILE *fp;
fp - fopen("D:/dete/Mystudio/demo.txt","r+");
int i;
float f;
fscanf(fp,"%d%f",&i,&f);
printf("%6.2f",i+f);
用二进制方式向文件读写一组数据
1、fwrite(butter,size,count,fp);向文件写数据块
| 名字 | 解释 |
|---|---|
| butter | 地址 |
| size | 字节数 |
| count | 要写多少数据块 |
| fp | FILE类型指针 |
#include <stdio.h>
#include <stdio.h>
struct Student
{
char name[20];
char addr[20];
}s1[3]={
{"lingren","Daoqi120"},
{"zhongli","liyue100"},
{"baerzebu","Daoqi100"},
};
int main()
{
FILE *fp;
fp = fopen("E:/USERS/桌面文件/test.txt","r+");
int i;
for(i=0;i<3;i++)
fwrite(&s1[i],sizeof(struct Student),1,fp);
fclose(fp);
wreturn 0;
}
2、fread(buffer,size,count,fp); 从文件中读数据块
五、随机读写数据文件
1、rewind函数 使文件位置标记指向文件开头
2、fseek(文件类型指针,位移量,起始点) 改变文件位置标记
fseek(fp,0,SEEK_SET); //光标移动到文件开头后往后偏移0个字节的位置
#include <stdio.h>
#include <stdlib.h>
struct Student
{
char name[10];
char addr[10];
}s1[4]={
{"lingren","Daoqi120"},
{"zhongli","liyue100"},
{"baerzebu","Daoqi100"},
};
int main()
{
FILE *fp;
fp = fopen("E:/USERS/桌面文件/test.txt","r+");
int i;
for(i=0;i<3;i++)
fwrite(&s1[i],sizeof(struct Student),1,fp);
fseek(fp,sizeof(struct Student),SEEK_SET);
fread(&s1[3],sizeof(struct Student),1,fp);
printf("%s,%s",s1[3].name,s1[3].addr);
fclose(fp);
return 0;
}
六、文件读写出错检测
1、ferror(fp) 检测是否出错
#include<stdio.h>
int main(void)
{
FILE* fp;
fp = fopen("demo.txt","w");
fgetc(fp);
if (ferror(fp))
{
printf("读取出错\n");
printf("%d\n",ferror(fp));
clearerr(fp);
printf("%d\n",ferror(fp));
}
fclose(fp);
return 0;
}