社区
C++ Builder
帖子详情
分数倾囊相赠!怎样编写自己的文件格式,及相关技术?
BoyMgl
2003-03-30 10:49:59
Up!来着给分!
...全文
72
19
打赏
收藏
分数倾囊相赠!怎样编写自己的文件格式,及相关技术?
Up!来着给分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yhz
2003-04-05
打赏
举报
回复
不需要的。
如果用fwrite写入的话,直接用fread就可以读出来了。
因为fread也是二进制读取的。(取决于你fopen的方式)
其实用就是文件方法也是挺好的。
只要自己能想明白,能熟练的应用,就可以了。
warton
2003-04-05
打赏
举报
回复
自定义数据结构,读写文件的问题
SharpKing515
2003-04-05
打赏
举报
回复
学习。。。。。
BoyMgl
2003-04-05
打赏
举报
回复
多谢前辈!我已经大彻大悟过来了,现在还有一些其他的问题:
对于读写c++的io流可不可以,如<iostream>...?
BoyMgl
2003-04-04
打赏
举报
回复
多谢以上各位前辈的慷慨赐教,小弟对文件格式的创建已经十分清楚,可是对文件格式的读去还是向不通,二进制文件格式应该用二进制的方法读取,怎么能够那么轻松呢?难道不需要对文件格式进行在分析了么?
gfh21cn
2003-04-04
打赏
举报
回复
关于文件和程序的关联
bool __fastcall Tmainform::regfile(AnsiString filepostfix, AnsiString filetype, AnsiString apppath, AnsiString iconpath)
{
TRegistry *reg=new TRegistry();
reg->RootKey=HKEY_LOCAL_MACHINE;
if(!reg->OpenKey(AnsiString("\\Software\\CLASSES\\")+AnsiString(".")+filepostfix,true))
return false;
AnsiString filekeyname=filepostfix+AnsiString("_conch_file");
reg->WriteString("",filekeyname);
reg->RootKey=HKEY_LOCAL_MACHINE;
if(!reg->OpenKey(AnsiString("\\Software\\CLASSES\\")+filekeyname,true))
return false;
reg->WriteString("",filetype);
reg->RootKey=HKEY_LOCAL_MACHINE;
if(!reg->OpenKey(AnsiString("\\Software\\CLASSES\\")+filekeyname+AnsiString("\\shell")+AnsiString("\\open")+AnsiString("\\command"),true))
return false;
reg->WriteString("",AnsiString("\"")+apppath+AnsiString("\"")+AnsiString("%1"));
if(iconpath.IsEmpty())
return true;
reg->RootKey=HKEY_LOCAL_MACHINE;
if(!reg->OpenKey(AnsiString("\\Software\\CLASSES\\")+filekeyname+AnsiString("\\DefaultIcon"),true))
return false;
reg->WriteString("",iconpath);
reg->CloseKey();
delete reg;
return true;
}
if(!regfile("sc","工程",filename,filename))
ShowMessage("error");
qiuafa
2003-04-03
打赏
举报
回复
我觉得,要理解程序里的数据结构(单个数据的格式),
再定义你的存储方式,决定是否按顺序存储,按怎样的顺序。
定义文件格式时应该保留一些余地,供以后兼容。
最后,要让该文件具有可读性。
现在比较常用的是二进制格式和xml格式。
zjjemail
2003-04-03
打赏
举报
回复
别人的文件分析别人的结构,自己的文件定义自己的结构!
勉励前行
2003-04-03
打赏
举报
回复
用流來做吧。
對於你要流化的類,加上一個用於讀寫流的接口:
class A
{
...
void SaveToStream(TStream *);
void LoadFromStream(TStream *);
//如果要使用<<或>>操作符,就重載它們
};
//流如何與文件格式相連,這個不用自己寫了吧,VCL中的TFileStream或STL中的文件流都可以很好地解決這個問題,這些類都是經過千錘百煉的。
//關鍵問題是:如何流化一個類?這個問題可大了。就是說,你的數據是怎樣的,如何讀,如何存。
Lewolf
2003-04-03
打赏
举报
回复
如果你使用C++ Builder最好使用流式文件
这样可以很好的利用TStream的派生类来处理,比如TFileStream,TMemoryStream。
文件格式你可以参考多媒体文件常用的RIFF格式,一般来讲有数据头,数据长度,数据内容等部分,每一个数据块都是这样。不同的数据块对应可以建立不同的对象。通常不建议使用全文本方式。
BoyMgl
2003-04-03
打赏
举报
回复
1、感谢如上前辈的精心指点,小弟迷题越见明朗,但还有一是相求,怎样建立文件关联?
2、怎样将文件路径传递给程序?程序是不是需要函数来识别所打开的文件的扩展名?并对其进行打开操作?
小弟不胜感激!
hmilyice
2003-04-02
打赏
举报
回复
1.这样保存的文件2进制格式的文件,一般来讲文件有两种保存方式一种是文本文件,一种是2进制文件,文本文件可以一行一行的读,2进制文件由于没有标准的格式,所以一般是编程者按照自己定义的结构进行保存,所以读取的时候也就要按照写入时的格式读取,因此读文件的代码一般和写文件的代码采用配对的函数,如上文。
2.你现定义一个结构,然后写文件和读文件都用这个结构就可以了,至于保存成什么扩展名随你喜欢了,不一定要.dat,因为扩展名是可以改的,.dat文件直接存字符改了扩展名照要可以看到内容。
myredsun
2003-04-02
打赏
举报
回复
定义一个结构,然后写入文件。可以保存成.dat文件,这样别人就看不到你的文件内容。
BoyMgl
2003-04-02
打赏
举报
回复
再次真诚的感谢葛前辈,不过仍然略有疑惑:
如上的例子,
1.在文件中写入的是一行文本,并且保存为*.fil文件可是读时为什么不直接使用读取文件格式的方法去读呢?
2.如果文件中存取的是其他的数据类型或结构,在读取时应怎样呢?
小弟十分着急望不吝赐教!
gfh21cn
2003-04-02
打赏
举报
回复
这是C的标准函数
非常简单的.
以下是帮助的例子.
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char msg[] = "this is a test";
char buf[20];
if ((stream = fopen("DUMMY.FIL", "w+"))
== NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);
/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);
/* read the data and display it */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
fclose(stream);
return 0;
}
BoyMgl
2003-04-01
打赏
举报
回复
多谢葛前辈指点,多谢上面的例子,可是我应如何读取该结构呢?
gfh21cn
2003-03-30
打赏
举报
回复
fread和fwrite是读写结构数据的
譬如:
你定义了
struct CPepole
{
int Order;
char Name[100];
int Sex;
};
//注意,不要是用AnsiString
CPepole *t_Pepole=new CPepole;
....
fwrite(t_Pepole, sizeof(CPepole ), 1, f_stream);
结构中的结构就是你文件格式
呵呵
gfh21cn
2003-03-30
打赏
举报
回复
流读写,其实只要
fopen(destfilename,"wb");//加个“b”
这样写就可以了
gfh21cn
2003-03-30
打赏
举报
回复
文件格式?
你看看文件读写的一些资料,就可以了
文件格式,其实就是文件的的第一个字节代表什么意思,第二个字符代表什么意思
文件读写有两种方式
1.文本
2.流
一般大的软件是用流
流是读写速度比较文本方式来快一点。
我比较喜欢使用
FILE
fopen
fread
fwrite
来读写文件
基于SSM大学生自主学习平台(毕设)
2,涉及
技术
:SSM框架(Spring,SpringMVC,MyBatis),MySQL数据库,Maven,Tomcat 3,开发环境:IDEA 4,讲解方式:从环境安装,项目搭建,以及项目介绍等进行讲解 5,包含资料:项目源码(含数据库文件),环境安装包...
复试线相差100分!某211大学一志愿和调剂
分数
线差距非常大!
我们都知道,考研一志愿和调剂的
分数
是不一样的。一般一志愿的
分数
要少于调剂考生的
分数
。但是这所211大学,调剂考生的
分数
和一志愿的
分数
居然差距如此大!这所大学就是——郑州大学。今天要讲的是...
科软
分数
线367分,复试平均分390分!中国科学
技术
大学软件学院
前段时间,考研成绩刚刚公布的时候,网上很多同学在...而且后来有同学留言提醒我,后面数据刷新到了更高:而前几天时间,中国科学
技术
大学公布了今年考研的校线:中国科学
技术
大学23考研校线工学(学硕):总分:3...
python文件练习题
值输出的内容要与该值输入时的内容完全一致。例如,输入内容是381.33333,输出内容也要是381.33333,不能输出为381.33.从文件"text.txt"中读入n行,...一个文件,文件中
分数
之间由换行隔开,输入的文件名为grade.txt。
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章