分数倾囊相赠!怎样编写自己的文件格式,及相关技术?

BoyMgl 2003-03-30 10:49:59
Up!来着给分!
...全文
72 19 打赏 收藏 转发到动态 举报
写回复
用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
来读写文件

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧