哪位有自己定义文件格式的例程,给小弟看一看,thanks

时间:2022-01-01 01:44:48
哪位有自己定义文件格式的例程,给小弟看一看,thanks

19 个解决方案

#1


关注

#2


我一直不大懂,文件头中的什么偏移量是干吗的,为什么在头上要记录文件大小等

#3


有人知道吗

#4


Windows系统封装了磁盘系统,使得程序员不必面对磁盘的物理结构,它向用户提供了文件这一概念,每打开一个文件时,Windows内部都有一个文件句柄(Handle),和一个变量(即文件指针),指向文件的当前位置,初始打开时,指针值为零,
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!

#5


有例程吗?

#6


有人帮忙吗,我急呀,谢谢啦

#7


关注,如果有请给小弟发一封!这里先谢谢啦!
ahai-ahai@263.net

#8


你可以找一本稍微深入的讲授c/c++的书,只要上面涉及到文件都有这样的格式,一般就是像什么客户资料的系统。

#9


我去找找看,如果哪位有的话,也可以告诉我一下

#10


你自己定义一些结构体
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了

#11


c++builder深度历险

#12


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Add(Edit1->Text,Edit2->Text.ToInt());

}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
  AnsiString   name;
  int          age;
};

mydata *ff=new mydata;
ff->name=name;
ff->age=age;

TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}


这样写入后,我这样读出


void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
   AnsiString name;
   int        age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}


但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办

#13


void Add(AnsiString name,int age)
{
struct mydata
{
  AnsiString   name;
  int          age;
};

mydata *ff=new mydata;
ff->name=name;
ff->age=age;

TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd);      //将文件指针移至末尾,soFromEnd是指从未    尾   算      起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}


#14


to conanbos(特兰克斯) :

fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?

#15


既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运

#16


既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运

#17


fo->Seek(sizeof(mydata1)*i,soFromBeginning);

i是指定找第次存入的信息的

#18


learning.............................................

#19


OpenFile();
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!

#1


关注

#2


我一直不大懂,文件头中的什么偏移量是干吗的,为什么在头上要记录文件大小等

#3


有人知道吗

#4


Windows系统封装了磁盘系统,使得程序员不必面对磁盘的物理结构,它向用户提供了文件这一概念,每打开一个文件时,Windows内部都有一个文件句柄(Handle),和一个变量(即文件指针),指向文件的当前位置,初始打开时,指针值为零,
当读取操作是从当前位置进行的.读了多少字节,指针就向下移动多少个字节,而Seek函数是用来移动这个指针的!

#5


有例程吗?

#6


有人帮忙吗,我急呀,谢谢啦

#7


关注,如果有请给小弟发一封!这里先谢谢啦!
ahai-ahai@263.net

#8


你可以找一本稍微深入的讲授c/c++的书,只要上面涉及到文件都有这样的格式,一般就是像什么客户资料的系统。

#9


我去找找看,如果哪位有的话,也可以告诉我一下

#10


你自己定义一些结构体
然后按你想要的方法写到文件中
就是一个你自己定义的文件格式了

#11


c++builder深度历险

#12


void __fastcall TForm1::Button1Click(TObject *Sender)
{
Add(Edit1->Text,Edit2->Text.ToInt());

}
//---------------------------------------------------------------------------
void Add(AnsiString name,int age)
{
struct mydata
{
  AnsiString   name;
  int          age;
};

mydata *ff=new mydata;
ff->name=name;
ff->age=age;

TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(sizeof(mydata)*i++,soFromEnd);
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}


这样写入后,我这样读出


void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct mydata1
{
   AnsiString name;
   int        age;
};
mydata1 *ff=new mydata1;
TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenRead);
fo->Seek(sizeof(mydata1)*i,soFromBeginning);
fo->Read((void *)ff,sizeof(mydata1));
delete fo;
Label1->Caption=(AnsiString)ff->name;
Label2->Caption=(AnsiString)ff->age;
}


但是只能读出当前写入的一个,如果我要读第一次写入的数据,就不行了。怎么办

#13


void Add(AnsiString name,int age)
{
struct mydata
{
  AnsiString   name;
  int          age;
};

mydata *ff=new mydata;
ff->name=name;
ff->age=age;

TFileStream *fo=new TFileStream("d:\\abc.dat",fmOpenReadWrite);
fo->Seek(0,soFromEnd);      //将文件指针移至末尾,soFromEnd是指从未    尾   算      起,然后从末尾添加!
fo->Write((void *)ff,sizeof(mydata));
delete fo;
}


#14


to conanbos(特兰克斯) :

fo->Seek(sizeof(mydata1)*i,soFromBeginning);
其中 i 是什么东东?

#15


既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运

#16


既然是自己定义,那就按照自己的格式来办就是了
至于文件头中的偏移量,这些东西,如果你不需要,就可以不考虑
文件中只记录你需要的一些数据量
定义完了文件格式后,然后按照自己定义的文件格式编写相应的文件读写程
序就可以了
我不知道你到底是想问些什么,我就经常使用一些自定义的文件格式来进行数据中转
还有什么问题可以发信给我联系zqhorse@sina.com
祝你好运

#17


fo->Seek(sizeof(mydata1)*i,soFromBeginning);

i是指定找第次存入的信息的

#18


learning.............................................

#19


OpenFile();
WriteFile();
ReadFile();
看看帮助!还有帮助里的See also,都是相关的东西!

#20