乐趣区

关于c:C语言的文件操作

文件分类

  • 程序文件:源程序文件(.c 文件)、指标文件(.obj 文件)、可执行文件(.exe 文件)
  • 数据文件:程序运行时读写的数据。

文件的关上和敞开

文件类型指针

  • 文件在被关上时,都会在内存中开拓一个相应的文件信息区,用来寄存被关上文件的相干信息(文件名、文件大小、文件地位等)。这些信息是保留在一个构造体中的,该构造体的申明就是 FILE 类型。

    FILE *fptr;   // 文件指针
     fptr = fopen("runoob.txt", "r"))  //fopen 关上一个文件,返回一个 FILE 指针
     //fptr 当初就指向 runoob.txt 文件的文件信息区。

文件的关上和敞开

  • 在关上文件时,都会返回一个 FILE* 的指针变量指向该文件,这样就建设了指针和文件的关系。
  • 留神:关上文件后,必须敞开文件,并且将定义的文件指针赋值为 NULL。
  • ANSIC 规定:应用 fopen 函数来关上文件,应用 fclose 函数来敞开文件
FILE *fopen(const char *filename, const char *mode)   // 关上文件函数
//filename:字符串,示意要关上的文件名称
//mode:字符串,示意文件的拜访模式,// 返回值:关上胜利返回一个 FILE 指针。否则返回 NULL

int fclose(FILE *stream)   // 敞开文件函数
// 如果胜利敞开,则该办法返回零。如果失败,则返回 EOF。
  • mode 文件拜访模式可选的值:

文件的程序读写

  • fgetc:字符读取函数(实用于所有流)
  • fputc:字符写入函数(写入单个字符)
  • fgets:文本行读取函数(从文件中读取一整行数据)
  • fputs:文本行写入函数
  • fscanf:格式化读取函数(从文件中读取数据)
  • fprintf:格式化写入函数(向文件中写入数据)
  • fread:二进制读取(实用于文件)
  • fwrite:二进制写入(实用于文件)

scanf/fscanf/sscanf 和 printf/fprintf/sprintf 区别

  • scanf:格式化的输出函数(输出就是读取,程序向控制台读取数据)
  • printf:格式化的输入函数(输入就是写入,程序向控制台写入数据)
  • fscanf:针对所有输出流的格式化输出函数
  • fprintf:针对所有输入流的格式化输入函数
  • sscanf:把一个字符串转换为格式化的数据
  • sprinft:把一个格式化数据转换成字符串

指定文件的地位读写

fseek 重定位指针

  • 依据文件指针的地位 (whence) 和偏移量 (offset) 来重定位文件指针(stream)
int fseek(FILE *stream, long int offset, int whence)
  • stream:这是指向 FILE 对象的指针。
  • offset:这是绝对 whence 的偏移量,以字节为单位。
  • whence:指定文件指针的初始地位

    • SEEK_SET:文件的结尾
    • SEEK_CUR:文件指针的以后地位
    • SEEK_END:文件的开端
#include <stdio.h>

int main ()
{
   FILE *fp;
   fp = fopen("file.txt","w+");  // 创立一个用于写入的空文件
   fputs("This is runoob.com", fp);  // 向文件中写入内容
   fseek(fp, 7, SEEK_SET);         // 重定位文件指针
   fputs("C Programming Langauge", fp); // 向重定位后的地位写入数据
   fclose(fp); // 敞开文件
   
   return(0);
}
// 运行后果:This is C Programming Langauge

ftell 查找以后文件指针地位

long int ftell(FILE *stream)
  • stream:以后文件指针
  • 返回值:返回以后文件指针相当于文件起始地位的偏移量

rewind 设置指针地位为文件起始地位

void rewind(FILE *stream)
  • 函数作用:使文件指针 stream 指向文件的起始地位。

被谬误应用的 feof 函数

  • 这个函数不能用来判断文件是否读取完结。
  • 而是用来在文件读取完结后,判断是哪种形式导致的文件读取完结(是文件读取失败还是文遇到文件结尾而完结的)

文件缓冲区

  • 零碎会主动在内存中为每一个正在应用的文件开拓一块文件缓冲区(是在内存中开拓的)
  • 从程序向磁盘写入数据时,数据会先传输到缓冲区,当缓冲区填充斥后,再一起传输到硬盘中。
  • 从硬盘读取数据到程序时,数据也会先传输到缓冲区,当缓冲区填充斥后,再一起传输到内存中。
  • fclose 在敞开文件时,也会将缓冲区残余的数据放到硬盘中。
退出移动版