当前位置: 首页 > news >正文

文件的操作

什么是文件
磁盘上的文件是文件。
在程序设计中,我们一般谈的文件有两种:程序文件,数据文件。
在这里插入图片描述
文件名:文件的唯一标识:以便用户识别和引用。
包含三部分:文件路径+文件名主干+文件后缀
例如:c:\code\test.txt
文件类型
根据数据的组织形式,数据文件被称为文本文件和二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
如果要求在外存上以ASCII码形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件
一个数据在内存中怎样存储?
字符一律以ASCII码的形式存储,数值型既可用ASCII形式存储,也可用二进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。

int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt", "wb");
	fwrite(&a, 4, 1, pf);//二进制的形式写到文件中。
	fclose(pf);
	pf = NULL;
	return 0;
}

在这里插入图片描述文件缓冲区
ANSIC标准采用“缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内存中为程序中每个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区,缓冲区的大小根据c编译系统决定。
在这里插入图片描述
文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE.
在这里插入图片描述
文件的打开和关闭
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

FILE* fopen(const char* filename,const char* mode);
int fclose(FILE* stream);

在这里插入图片描述

 /* fopen fclose example */
 #include <stdio.h>
 int main ()
 {
  FILE * pFile;
  pFile = fopen ("myfile.txt","w");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
 }

在这里插入图片描述

文件的随机读写

fseek

int fseek(FILE* stream,long int offset,int origin);
 /* fseek example */
 #include <stdio.h>
 int main ()
 {
  FILE * pFile;
  pFile = fopen ( "example.txt" , "wb" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
 }

在这里插入图片描述
ftell

long int ftell(FILE* stream);

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

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

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

void rewind(FILE* stream);
 #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;
 }

在这里插入图片描述

http://www.dtcms.com/a/121994.html

相关文章:

  • 自然语言处理入门6——RNN生成文本
  • 揭开 MCP 的神秘面纱:标准化 AI 上下文管理的未来(下)
  • 永磁同步电机 | 分类 / 转子结构 / FOC 控制 / 电路分析
  • Android 中集成 Unity 工程的步骤
  • 点云处理常用的软件、开源库及数据集
  • 将jar包制作成deb一键安装包
  • 从 Excel 到你的表格应用:条件格式功能的嵌入实践指南
  • 【机密计算顶会解读】13:CAGE:通过 GPU 扩展补充 Arm CCA
  • 2025年3月全国青少年软件编程等级考试(Python五级)试卷及答案
  • 图解Java设计模式
  • 005.Gitlab CICD变量使用
  • oauth2.0认证原理
  • word表格间隔设置
  • C++20 数学常数:<numbers> 头文件的革新
  • cmd清除网络共享连接凭证
  • C++高精度算法(加、减、乘)
  • 【C++】 —— 笔试刷题day_13
  • 抽象类及其特性
  • cpp(c++)win 10编译GDAL、PROJ、SQLite3、curl、libtiff
  • Easysearch VS Opensearch 数据写入与存储性能对比
  • HOW - 实现 useClickOutside 或者 useClickAway
  • 大模型本地部署系列(1) Ollama的安装与配置
  • 神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)
  • 408 计算机网络 知识点记忆(6)
  • Elasticsearch DSL 中的 aggs 聚合分析
  • 数据结构实验3.3:求解迷宫路径问题
  • 西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成
  • SQL注入(SQL Injection)
  • Ollama 与 llama.cpp 深度对比
  • [特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]