C语言-文件

目录

1.什么是文件?

磁盘上的文件就是文件

一般包含两种:程序文件数据文件

1.1 程序文件

程序文件包含源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)

1.2 数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据文件,或者输出内容的文件

2.二进制文件和文本文件?

根据数据的组织形式,数据文件被称为文本文件二进制文件
二进制文件 :数据在内存中以二进制形式存储,不加转换的输出到外存的文件中
文本文件:要求在外存上以ASCll码的形式存储,则需要在存储前转换

3.文件的打开和关闭

文件在读写前应该打开文件 ,在使用结束后应该关闭文件

c 复制代码
//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );
"r"(只读) 为了输入数据,打开一个已经存在的文本文件
"w"(只写) 为了输出数据,打开一个文本文件
"a"(追加) 向文本文件尾添加数据
"rb"(只读) 为了输入数据,打开一个二进制文件
"wb"(只写) 为了输出数据,打开一个二进制文件
c 复制代码
#include <stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return;
	}
	//写文件
	char a = 'a';
	for (; a <= 'z'; a++)
	{
		putc(a, pf);
	}

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

4.文件的顺序读写

上面说的适用于所有输入流⼀般指适用于标准输入流和其他输入流(如文件输入流);所有输出流⼀

般指适用于标准输出流和其他输出流(如文件输出流)。

5.文件的随机读写

5.1 fseek

根据文件指针的位置和偏移量来定位文件指针

c 复制代码
int fseek ( FILE * stream, long int offset, int origin );

举例:

c 复制代码
#include <stdio.h>
int main()
{
	//打开文件
	FILE* pr=fopen("test.txt", "r");
	if (pr == NULL)
	{
		perror("fopen");
		return;
	}
	//读文件
	int ch = 0;
	ch=fgetc(pr);
	printf("%c\n", ch);
	fseek(pr, 4, SEEK_CUR);
	ch = fgetc(pr);
	printf("%c\n", ch);
	//关闭文件
	fclose(pr);
	pr = NULL;
	return 0;
}

5.2 ftell

返回文件指针相对于起始位置的偏移量

c 复制代码
long int ftell ( FILE * stream );

举例:

c 复制代码
/* ftell example : getting size of a file */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  long size;

  pFile = fopen ("myfile.txt","rb");
  if (pFile==NULL) perror ("Error opening file");
  else
  {
    fseek (pFile, 0, SEEK_END);   // non-portable
    size=ftell (pFile);
    fclose (pFile);
    printf ("Size of myfile.txt: %ld bytes.\n",size);
  }
  return 0;
}

5.3 rewind

让文件指针的位置回到文件的起始位置

c 复制代码
void rewind ( FILE * stream );

举例:

c 复制代码
/* rewind example */
#include <stdio.h>

int main ()
{
  int n;
  FILE * pFile;
  char buffer [27];

  pFile = fopen ("myfile.txt","w+");
  for ( n='A' ; n<='Z' ; n++)
    fputc ( n, pFile);
  rewind (pFile);
  fread (buffer,1,26,pFile);
  fclose (pFile);
  buffer[26]='\0';
  puts (buffer);
  return 0;
}

6.文件读取结束的判定

注意:在文件读取过程中,不能用feof函数的返回值直接来判断文件是否结束
feof的作用:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束

  • 文本文件读取是否结束,判断返回值是否为EOFfgetc),或者NULL(fgets)
  • 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数
    • fread判断返回值是否小于实际要读的个数

7.文件缓冲区

因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

相关推荐
GilgameshJSS4 小时前
STM32H743-ARM例程33-TOUCH
c语言·arm开发·stm32·单片机·嵌入式硬件
纵有疾風起6 小时前
C++—string(1):string类的学习与使用
开发语言·c++·经验分享·学习·开源·1024程序员节
Molesidy7 小时前
【随笔】【QT】QT5.15.2版本的最新下载方式!!!
开发语言·qt
luoqice7 小时前
如何编译QT可执行release程序
c语言
二进制person8 小时前
Java EE初阶 --多线程2
java·开发语言
yue0088 小时前
C#理论学习-WinForm实践开发教程总结
开发语言·学习·c#
007php0079 小时前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
Mr.Jessy9 小时前
Web APIs学习第一天:获取 DOM 对象
开发语言·前端·javascript·学习·html
午安~婉9 小时前
javaScript八股问题
开发语言·javascript·原型模式
想不明白的过度思考者9 小时前
Rust——异步递归深度指南:从问题到解决方案
开发语言·后端·rust