社区
C++ Builder
帖子详情
郁闷 深入讨论文件结构的问题 季老大 捧场 非常急
BoyMgl
2003-08-02 10:19:38
我需要一个文件结构
1、存储相关信息(SInfo)
2、存储数据(SData)
但是我要写入的不止一个SData,这个数目是可变的,请问怎么办?
如何度曲?
...全文
103
17
打赏
收藏
郁闷 深入讨论文件结构的问题 季老大 捧场 非常急
我需要一个文件结构 1、存储相关信息(SInfo) 2、存储数据(SData) 但是我要写入的不止一个SData,这个数目是可变的,请问怎么办? 如何度曲?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BoyMgl
2003-08-05
打赏
举报
回复
多谢!!!!!教讳!
我已经明白了!
copy_paste
2003-08-05
打赏
举报
回复
哦,没说清
一般写动态数据时,一般是分开size和data来写的:
// int size
// char *data;
Stream->WriteBuffer(&size, sizeof(size));
Stream->WriteBuffer(data, size);
...
而读数据也是分开来读:
int size;
Stream->ReadBuffer(&size, sizeof(size));
char *data = new char[size];
Stream->ReadBuffer(data, size);
...
如果是需要结构类型的话,需要保留出data域,不能忽略
TDyncData Buffer;
Buffer.size = size;
Buffer.data = data;
Stream->WriteBuffer(&Buffer, sizeof(Buffer));
Stream->WriteBuffer(data, Buffer.size);
读的时候
TDnycData Buffer;
Stream->ReadBuffer(&Buffer, sizeof(Buffer));
char *data = new char[Buffer.size];
Buffer.data = data;
Stream->ReadBuffer(data, Buffer.size);
前面的那种结构是size之后,紧接着就是data,而后面则是将data指针占用了size后面的4字节,然后才是真正的data,因为有些情况是需要有定义的结构,然后才是数据(后面的情况),所以,会这种情况.
你还是多试试,不然偶也是白搭
mme
2003-08-04
打赏
举报
回复
我好像看到错别字一大堆.....
没人理会是因为他们觉得已经说得很明白了,可是你却还是不明白:)
为什么不自己动手,试验解决呢!
我觉得根本不是什么难题,除非你从来就没有用过......
如果说错了,请多多包涵 ^_^
BoyMgl
2003-08-04
打赏
举报
回复
真奇怪?怎么总是美人理呢?为什么我的贴子会下沉呢?
我顶!
jiangchun_xn
2003-08-04
打赏
举报
回复
我自己写过一个摸版类,转本在文件中存储数据结构,支持头部信息,LRU缓冲,其实主要是你认识到在文件中数据结构指针就是一个整数值--文件中的位置,把以前会的数据结构转过来就行了。
iting
2003-08-04
打赏
举报
回复
如果你单个的纪录是定长的,或者变长但是有最大长度,那么可以在写入和读取是采用固定最大缓冲的办法减少内存再分配,提高效率,并可减少内存碎片产生,增强稳定性。
如下:
//注意:本文件开头要用 #pragma pack(1)指示编译器按1字节方式打包。
// 最后的时候可以再恢复编译器默认值
// 同时自己注意内存地址对齐,不要让你的结构占用奇数长度的内存。
BYTE Buf[Max_Buf_Len];
typedef sturct tagTemp
{
int len;
BYTE p[0]; //非标准用法。这个地方也可以是你的SData结构。
//如:SDATA sData[0];
}TEMP,*PTEMP;
PTEMP pTmp = PTEMP(Buf);
.....
BoyMgl
2003-08-04
打赏
举报
回复
to copy_paste(木石三) ( ) :
你的意思是char *也可以写入文件?但是char*只有四字节,四用来存储地址的,存入文件后读出来的怎么会是字符呢?
gfh21cn
2003-08-04
打赏
举报
回复
typedef struct tagTemp
{
char p[];
int i;
} TEMP;
最好指明多少个
copy_paste
2003-08-04
打赏
举报
回复
一般是定义好你的数据的结构,然后再写入文件,读的时候,根据你的结构来读。
结构是定长的就是这样,如果是不确定的,一般是先写入后面数据的长度,然后再写数据,这样,读的时候,先将长度读出来,然后申请那么长的内存,再将后面的数据读出。
typedef struct
{
char v1[20];
int v2;
unsigned v3;
...
}TStaticData;
typedef struct
{
int dataLen;
char *data;
}TDyncData;
上面的TStaticData是静态长度的,所以无所谓,因为一个TStaticData变量占用文件的长度可以用: sizeof(TStaitcData)取得,
而TDyncData则不行,所以,用了一个datalen来表示后面的数据的长度,第一,先将数据长度从文件读出,然后来继续读出那么长的内容。
基本是这样。
BoyMgl
2003-08-04
打赏
举报
回复
又没人理,我顶,我顶!
希望大家帮忙顶一下!
BoyMgl
2003-08-03
打赏
举报
回复
多谢!
直到倒数第2个逗号我都会操作,可是:
1、是否药用fseek来重新定义读取位置?
2、知道个数后,怎样使用fread读取那么多结构?
3、定义结构时,这样是否合法?
typedef struct tagTemp
{
char p[];
int i;
} TEMP;
jishiping
2003-08-03
打赏
举报
回复
先写入SInfo,然后写入一个整数,表示SData的个数或者是所有SData的数据长度。读取时,
先读取SInfo,然后读取一个整数,根据读取的整数,就知道了后面的SData的个数了。
BoyMgl
2003-08-03
打赏
举报
回复
怎么没有人理?
我顶!
BoyMgl
2003-08-02
打赏
举报
回复
to pp616(傻小子) ( )
怎样写入(用fwrite)
怎样读取(用fread)
BoyMgl
2003-08-02
打赏
举报
回复
多谢指点迷津!
请问长度是治水的长度?
分割标志又应如何度曲?
*1、劳烦写出代码?不胜感激!
2、用XML好像也可以实现,应如何操作?
pp616
2003-08-02
打赏
举报
回复
SInfo+SDataLength+SData+......+SData
qibo999
2003-08-02
打赏
举报
回复
建一个表格记录SData的数目与长度(或:定义数据的分割标志)不就得了吗?
程序员的十层楼,你属于哪一层?
原文网址:程序员的十层楼今天整理收藏夹,发现经典的太多了。这篇同上一篇“【转】世界上最牛的程序员”一样都是收藏很久的东西了,现在也忍痛转载一下。程序员的十层楼作者:周伟明 自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,
<老板给我上了最后一课:永远要做有价值的人>
第1节 老板给我上了最后一课:永远要做有价值的人(二) 从国营单位出来后,我去了一家伪外企。 为什么说是伪外企,首先这是一家香港的公司,应该还是合资的;其次在这家公司从人力资源的角度来说,根本没有什么良好的人力资源体系,连入职培训都没有,当然早几年,人力资源的发展是很有限的;第三是最重要的,从我进这个公司起,这个公司就一直处于风雨飘摇之中,几次
高创新!无人机5G辅助优化无人机(Matlab实现)
高创新!【无人机】5G辅助优化无人机(Matlab实现)内容概要:本文介绍了一种高创新性的5G辅助优化无人机的技术方案,结合Matlab实现,重点探讨了如何利用5G通信技术提升无人机在复杂环境下的路径规划、协同控制与实时通信性能。文中涵盖了无人机系统建模、5G网络辅助定位与数据传输优化、多目标优化算法应用等内容,并提供了完整的Matlab代码实现,适用于无人机三维路径规划、协同避障、任务调度等场景的仿真与验证。; 适合人群:具备一定Matlab编程基础,从事无人机、通信、自动化或智能优化方向研究的研究生、科研人员及工程技术人员,尤其适合开展智能无人系统与5G融合研究的用户; 使用场景及目标:① 实现5G辅助下的无人机高精度定位与低延迟通信优化;② 结合智能算法(如改进粒子群、NSGA-II等)完成多无人机协同路径规划与动态避障;③ 借助Matlab平台完成系统建模、仿真与性能评估,支撑论文复现或科研项目开发; 阅读建议:建议读者结合提供的Matlab代码与技术文档,逐步运行仿真案例,重点关注5G通信模块与无人机控制模块的接口设计,同时可拓展至多智能体协同、边缘计算融合等前沿方向进行二次开发与创新研究。
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)
基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)内容概要:本文介绍了基于天牛须算法(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度方法,并提供了Matlab代码实现。该方法结合了BAS算法的局部搜索能力与NSGA-Ⅱ算法的多目标优化优势,用于解决微电网中可再生能源出力、负荷需求及电价等因素不确定条件下的能量调度
问题
,实现经济成本、碳排放和系统稳定性等多重目标的协同优化。文中还提到了多种应用场景和技术支持,涵盖电力系统优化、智能算法调度、路径规划等多个科研方向。; 适合人群:具备一定电力系统、优化算法基础,熟悉Matlab编程,从事新能源、微电网或智能优化相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于交直流混合微电网的能量管理与调度优化;②解决多目标、多场景下的资源分配与运行优化
问题
;③为科研工作者提供算法复现、仿真建模与优化策略设计的技术支持; 阅读建议:建议读者结合文档提供的Matlab代码进行仿真复现,重点关注BAS与NSGA-Ⅱ算法的融合机制及在多目标优化中的实现方式,同时参考文中提及的相关案例与技术扩展,深化对微电网调度
问题
的理解与应用能力。
基于springboot大学师生管理系统的设计与实现源码.zip
基于springboot大学师生管理系统的设计与实现源码.zip
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章