c复习day10

文件

  • 文本文件:存储时,是将字符的ascii值存在磁盘中,取的时候将数值ascii翻译成对应的字符
  • 二进制文件:存的是二进制,取的是二进制

文件指针

  • 当打开一个文件时,系统会返回一个结构体,这个结构体有对此文件操作的所有信息
  • 调用fopen时,系统返回这个结构体地址
  • FILE *p = fopen(“a.txt”,”r”);
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct 
{
short level;//缓冲区"满"或"空"的程度
unsigned flags;//文件状态标志
char fd;//文件描述符
unsigned hold;//如无缓冲区不读取字符
short bsize;//缓冲区的大小
unsigned char *buffer;//数据缓冲区的位置
unsigned ar;//指针,当前的指向
unsigned istemp;//临时文件,指示器
short token;//用于有效性的检查
} FILE;

文件指针

  • 当打开一个文件时系统会返回一个结构体,这个结构体有对此文件操作的所有信息
  • 调用fopen时,系统返回这个结构体地址
1
2
FILE *p = fopen("a.txt");
fputc('a',p);3

打开文件

  • FILE *fp = fopen(“pathname”,打开方式);
  • 注意打开的选项
  • 只有带r的选项,如果文件不存在,不创建文件
  • 带w的选项,打开时会清空文件
  • fopen的返回值:如果成功返回FILR结构体地址,失败返回NULL
  • 返回的文件流指针标识了打开的那个文件
r或者rb 以只读的方式打开一个文本文件(不创建文件,若文件不存在则报错)
w或者wb 以写的方式打开文件(如果文件存在则清空文件,文件不存在则创建)
a或者ab 以追加的方式打开文件,在末尾添加内容,若文件不存在则创建文件
r+或者rb+ 以可读,可写的方式打开文件(不创建新文件)
w+或者wb+ 以可读,可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建)
a+或者ab+ 以添加文件的方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件
1
2
3
4
5
6
FILE *fp fopen("a.txt","w");
if (NULL == fp)
{
perror("");

}

fclose

  • fclose(FILE *fp);
  • 功能:关闭文件
  • 参数:文件流指针

相对文件

  • 在vs中调试运行:相对路径,相对的是工程文件
  • 手动运行,相对路径相对路径是,当前的可执行文件

设备文件

  • stdin
  • stdout
  • stderr
  • 当启动一个程序时,系统打开3个设备文件
1
2
3
FILE *stdin = fopen(stdin,"r");
FILE *stdout = fopen(stdout,"w");
FILE *stderr = fopen(stderr,"w");

fputc

  • 功能: 写入一个字符到文件中
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int fputc(int ch;FILE *stream);
功能:将ch转换为unsigned char后写入stream指定的文件中
参数:
ch:需要写入的字符;
stream:文件指针;
返回值:
成功:写入文件的字符;
失败:返回-1;
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FILE *fp = fopen("a.txt","w");
if(fp == NULL)
{
perror("open");
return;
}
char buf[] = "hello";
int i = 0;
while(buf[i] != 0)
{
fputc(buf[i],fp);
i++;
}
fclose(fp);

fgetc

1
2
3
4
5
6
7
8
#include <stdio.h>
int fgetc(FILE *streap);
功能:从stream指定的文件中读取一个字符;
参数:
stream:文件指针
返回值:
成功:返回读取到的字符
失败:-1

feof

  • 如果读取文件不是纯文本,有像-1这种数字,那么就不可以使用EOF(-1)作为文件的结尾
1
2
3
4
5
6
7
8
#include <stdio.h>
int feof(FILE *stream);
功能:检测是否读取到了文件结尾.
判断的是最后一次"读取操作的内容",不是当前位置内容(上一个内容)
参数:stream:文件指针
返回值:
非零值:已经到文件结尾;
0;没有到文件结尾;

fgets 从文件读取字符串

注意:fgets读取遇到\n结束

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
char *fgets(char *str,int size,FILE *stream);
功能:从stream指定的文件内读入字符,保存到str所指向的内存空间,知道出行换行字符
文件结尾或到size - 1,最后会自动加上\0作为字符串结束.
参数:
str:字符串;
size:指定最大读取字符串的长度(size -1)
stream:文件指针;
返回值:
成功:读取的字符串;
读到文件尾或出错:NULL;

fputs向文件写入字符串

1
2
3
4
5
6
7
8
9
#incldue <stdio.h>
int fputs(const char *str,FILE *stream);
功能:将str所指定的字符串写入到stream指定的文件中,字符串结束符'\0',不写入文件
参数:
str:字符串
stream:文件指针
返回值:
成功:0
失败:
你的支持是我最大的动力!
0%