C语言入门教程-二进制文件
[09-12 13:14:04] 来源:http://www.88dzw.com 电路基础 阅读:8394次
文章摘要:二进制文件二进制文件非常类似于结构体数组,只不过这些结构体被保存在一个磁盘文件而非内存数组中。因为是使用磁盘保存二进制文件中的结构体,所以您可以创建非常庞大数目的结构体(只受可用磁盘空间的限制)。它们还是永久性的,并且可以随时使用。惟一的缺点是磁盘存取会造成延迟。 二进制文件与文本文件有两个不同的特点: 您可以立即跳至文件中的任一结构体,类似于数组的随机存取。 您可以随时改变文件中任一处结构体的内容。 二进制文件通常还具有比文本文件更短的存取时间,因为文件记录的二进制映像是直接从内存传送至磁盘的(或相反的方向)。对于文本文件,所有数据都要反复转换成文本,而这需要花费时间。 C所支持的“结构体文
C语言入门教程-二进制文件,标签:电子电路基础,模拟电路基础,http://www.88dzw.com二进制文件
二进制文件非常类似于结构体数组,只不过这些结构体被保存在一个磁盘文件而非内存数组中。因为是使用磁盘保存二进制文件中的结构体,所以您可以创建非常庞大数目的结构体(只受可用磁盘空间的限制)。它们还是永久性的,并且可以随时使用。惟一的缺点是磁盘存取会造成延迟。
二进制文件与文本文件有两个不同的特点:
- 您可以立即跳至文件中的任一结构体,类似于数组的随机存取。
- 您可以随时改变文件中任一处结构体的内容。
二进制文件通常还具有比文本文件更短的存取时间,因为文件记录的二进制映像是直接从内存传送至磁盘的(或相反的方向)。对于文本文件,所有数据都要反复转换成文本,而这需要花费时间。
C所支持的“结构体文件”概念十分简洁。某文件被打开后,您可以读取一个结构体,写入一个结构体,或移动至文件中的任一结构体。这种文件模型要求有一个文件指针的概念。打开文件时,指针指向0号记录(文件的第一个记录)。任何读操作都读取当前被指向的结构体,并将指针指向下一个结构体。任何写操作都向当前被指向的结构体写入数据,并将指针指向下一个结构体。移动操作将文件指针移至指定的记录。
请记住C总是将文件内容视为从磁盘读入内存或从内存写入磁盘的字节块。C使用文件指针,但指针可以指向文件中的任一字节。因此您需要自己管理好指针的位置。
下面的程序可以说明以上概念:
#include\
/* 任取一种文件记录结构,也可以是其他形式 */
struct rec
{
int x,y,z;
};
/* 向文件“junk”先写入
再读取10条随意的记录。*/
int main()
{
int i,j;
FILE *f;
struct rec r;
/* 创建一个包含10条记录的文件 */
f=fopen("junk","w");
if (!f)
return 1;
for (i=1;i<=10; i++)
{
r.x=i;
fwrite(&r,sizeof(struct rec),1,f);}
fclose(f);
/* 读取这10条记录 */
f=fopen("junk","r");
if (!f)
return 1;
for (i=1;i<=10; i++)
{
fread(&r,sizeof(struct rec),1,f);printf("%d \ n
",r.x);
}
fclose(f);
printf("\ n
");
/* 使用fseek逆序读取10条记录 */
f=fopen("junk","r");
if (!f)
return 1;
for (i=9; i>=0; i--)
{
fseek(f,sizeof(struct rec)*i,SEEK_SET);
fread(&r,sizeof(struct rec),1,f);printf("%d \ n
",r.x);
}
fclose(f);
printf("\ n
");
/* 使用fseek隔条读取记录 */
f=fopen("junk","r");
if (!f)
return 1;
fseek(f,0,SEEK_SET);
for (i=0;i<5; i++)
{
fread(&r,sizeof(struct rec),1,f);printf("%d \ n
",r.x);
fseek(f,sizeof(struct rec),SEEK_CUR);
}
fclose(f);
printf("\ n
");
/* 使用fseek读取第4条记录,
修改记录内容并写回 */
f=fopen("junk","r+");
if (!f)
return 1;
fseek(f,sizeof(struct rec)*3,SEEK_SET);
fread(&r,sizeof(struct rec),1,f);
r.x=100;
fseek(f,sizeof(struct rec)*3,SEEK_SET);
fwrite(&r,sizeof(struct rec),1,f);
fclose(f);
printf("\ n
");
/* 读取10条记录
检查第4条记录是否已被修改 */
f=fopen("junk","r");
if (!f)
return 1;
for (i=1;i<=10; i++)
{
fread(&r,sizeof(struct rec),1,f);printf("%d n
",r.x);
}
fclose(f);
return 0;
}
Tag:电路基础,电子电路基础,模拟电路基础,电路基础
- 上一篇:电感基础知识大全
《C语言入门教程-二进制文件》相关文章
- › C语言入门教程-二进制文件
- › C语言入门教程-打开文本文件
- › C语言入门教程-读取文本文件
- › C语言入门教程-指针
- › C语言入门教程-为什么要用指针?
- › C语言入门教程-指针基础
- 在百度中搜索相关文章:C语言入门教程-二进制文件
- 在谷歌中搜索相关文章:C语言入门教程-二进制文件
- 在soso中搜索相关文章:C语言入门教程-二进制文件
- 在搜狗中搜索相关文章:C语言入门教程-二进制文件
编辑推荐
分类导航
最新更新
- · 什么是系统仿真
- · 什么是CPCI
- · 英特尔 Parallel Composer入门
- · 什么是支持数据库,什么是中宏数据库
- · 什么是数据交换技术
- · 什么是内部数据传输率
- · 什么是空间数据交换中心
- · 什么是差异备份
- · 什么是备份集
- · 什么是映像备份
热门排行
- · IGBT模块
- · 什么是24脉波整流变压器
- · 自动变速器不能强制降挡故障原因、诊断与排
- · 什么是MD机
- · 中心频率,什么是中心频率
- · 功率单位mw和dbm的换算表
- · 中值滤波模块设计思路
- · 反馈振荡器的原理
- · 气体激光器简介
- · 数制与进位记数法