C语言(第十章--对文件的输出)

atdunbg Lv3
  • 根据数据的数组形式,数据文件可以分为ASCII文件(文本文件)二进制文件

10.2 打开与关闭文件

1、用fopen打开文件

  • fopen(文件名,使用文件方式)

    1
    2
    fopen("D:\\date\\Mystudio\\demo.txt","r+");
    fopen("D:/date/Mystudio/demo.txt","r+"); //绝对路径
  • fopen函数的返回值是只要操作文件(demo.txt)的指针,若出错,将返回一个空指针(NULL)。

  • 因此,一般是将fopen函数返回值赋给一个指向文件的指针变量。

    1
    2
    3
    4
    5
    6
    7
    8
    FILE *fp;		//定义一个文件指针
    //打开一个文件,"r+"表示可读可写的模式打开
    fp = fopen("D\\date\Mystudio\\demo.txt","r+");
    if(fp==NULL)
    printf("文件demo打开失败");
    else
    printf("文件demo打开成功");
    fclose(fp); //关闭文件

2、用fclose关闭文件

  • fclose(文件指针);
    1
    fclose(fp);
  • 如不关闭文件就结束程序可能会丢失数据。
  • fclose函数也会返回一个值,当成功执行了关闭为文件操做,返回值为0,否则返回EOF(-1);

10.3 顺序读写数据文件

一、向文件读写字符

1、fgetc(fp) 从fp指向的文件读入一个字符

  • 读成功则返回所读的字符,失败则返回u文件结束标志EOF(-1);
    1
    char c=fgetc(fc);

2、fputc(ch.fp); 把字符ch写道文件指针变量fp所指向的文件中

  • 输出成功,则返回值就是输出的字符,失败就会返回EOF(-1);

3、feof(fp)函数用来判断文件是否结束

  • 如果遇到文件结束,函数feo(fp)的值为非零值,否则为0
1
2
3
4
5
6
7
8
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;
1
2
3
4
5
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值

    1
    2
    3
    4
    FILE *fp;
    char c[15]={"Hello Linux."};
    fp = fopen("d/date/Mystdio/demo.txt","r+");
    fputs(c,fp);

三、用格式化方式读写文本

fprint(文件指针,格式字符串,输出列表)格式化输出字符

1
2
3
4
5
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(文件指针,格式字符串,输出列表)格式化读入字符

1
2
3
4
5
6
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类型指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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(文件类型指针,位移量,起始点) 改变文件位置标记

1
fseek(fp,0,SEEK_SET);		//光标移动到文件开头后往后偏移0个字节的位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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) 检测是否出错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}
  • Title: C语言(第十章--对文件的输出)
  • Author: atdunbg
  • Created at : 2022-12-20 20:02:00
  • Updated at : 2024-06-12 13:43:20
  • Link: https://atdunbg.xyz/2022/12/20/c_language_10/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments