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语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

相关推荐
dme.1 分钟前
Javascript之DOM操作
开发语言·javascript·爬虫·python·ecmascript
teeeeeeemo6 分钟前
回调函数 vs Promise vs async/await区别
开发语言·前端·javascript·笔记
加油吧zkf11 分钟前
AI大模型如何重塑软件开发流程?——结合目标检测的深度实践与代码示例
开发语言·图像处理·人工智能·python·yolo
学不动CV了15 分钟前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
ejinxian26 分钟前
PHP 超文本预处理器 发布 8.5 版本
开发语言·php
软件黑马王子1 小时前
C#系统学习第八章——字符串
开发语言·学习·c#
阿蒙Amon1 小时前
C#读写文件:多种方式详解
开发语言·数据库·c#
Da_秀1 小时前
软件工程中耦合度
开发语言·后端·架构·软件工程
Fireworkitte1 小时前
Java 中导出包含多个 Sheet 的 Excel 文件
java·开发语言·excel
运器1232 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程