文件的操作

什么是文件

磁盘上的文件是文件。

在程序设计中,我们一般谈的文件有两种:程序文件,数据文件。

文件名 :文件的唯一标识:以便用户识别和引用。

包含三部分:文件路径+文件名主干+文件后缀

例如:c:\code\test.txt
文件类型

根据数据的组织形式,数据文件被称为文本文件和二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

如果要求在外存上以ASCII码形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

一个数据在内存中怎样存储?

字符一律以ASCII码的形式存储,数值型既可用ASCII形式存储,也可用二进制形式存储。

如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。

c 复制代码
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);
c 复制代码
 /* 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);
c 复制代码
 /* 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);

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

c 复制代码
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);
c 复制代码
 #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;
 }
相关推荐
顶点多余9 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI情绪识别开源10 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
罗西的思考11 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
「QT(C++)开发工程师」11 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F11 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
OPEN-F11 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
hahaha601611 小时前
HLS高层次综合设计技巧--C++类和模板
图像处理·人工智能·算法·计算机视觉
有点。11 小时前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN11 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
多弗朗皮卡丘12 小时前
算法详解4:买卖股票的最佳时机系列(上)
算法