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

相关推荐
雨中散步撒哈拉19 分钟前
13、做中学 | 初一下期 Golang数组与切片
开发语言·后端·golang
0wioiw021 分钟前
Go基础(③Cobra)
开发语言·后端·golang
楼田莉子29 分钟前
C++算法专题学习:栈相关的算法
开发语言·c++·算法·leetcode
晨非辰34 分钟前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
_oP_i41 分钟前
Java 服务接口中解决跨域(CORS,Cross-Origin Resource Sharing)问题
java·开发语言
陈序猿(代码自用版)1 小时前
【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
c语言·开发语言·考研
77qqqiqi1 小时前
学习循环语句
c语言
唐•苏凯1 小时前
ArcGIS Pro 遇到严重的应用程序错误而无法启动
开发语言·javascript·ecmascript
kyle~1 小时前
排序---冒泡排序(Bubble Sort)
c语言·c++·算法
l1t1 小时前
我改写的二分法XML转CSV文件程序速度追上了张泽鹏先生的
xml·c语言·人工智能·算法·expat