建立一种新的格式的文件复杂吗?(100分)

  • 主题发起人 shijiesun
  • 开始时间
S

shijiesun

Unregistered / Unconfirmed
GUEST, unregistred user!
一些软件可以生成自己独特的文件,例如Photoshop、MATLAB和Delphi等,这个技术复杂吗?
 
设计好自己的文件头,文件结构,文件尾,用TFILESTREAM读写就可以了.
 
不是很复杂, 应该说比较简单地, 尤其是二进制地. 文件头,用什么, 文件尾用什么, 文件正文份几块, 每块地开头是什么, 每块地大小,长度等等.
 
不太复杂,也不太简单吧.
简单地定义和读写不太复杂,如果文件的结构很复杂,那就不太简单了.呵呵
下面是我自定义的一个文件头部分:
TFileHead=record
IndexPos :longint;
//索引位置
IndexLen :longint;
//索引长度
RecentDate :TDateTime;
//最后阅读或修改时间
Password :string[16];
//文件密码
Author :string[16];
//作者
CreateDate :TDateTime;
//创建时间
Version :byte;
//版本
Keep :longint;
//保留字段
AllowDragDrop :Boolean;
//允许拖拽
AllowEdit :Boolean;
//允许编辑
AllowExport :Boolean;
//允许导出数据
AutoSort :Boolean;
//自动排序
IsPublished :Boolean;
//发布标志。已发布的内容不能编辑。
FileMark :string[6];
//文件标志
DataNumber :longint;
//每次新建数据时增加,包括已删除的
DataCount :longint;
//数据个数,包括空数据(只有数据头)
DataSize :longint;
//数据长度.实际是文件长度
MaxLen :longint;
//冗余数据的最大值
InnerName :string[20];
//文件内部名,不可更改
FileNote :string[100];
//文件说明
end;
定义完了,再自己实现读写即可.
 
楼上的文件头只能自己的程序识别吧.不通用
 
简单示例:实现了保存一个StrGrid中的数据
procedure TMainForm.SaveGridData(FileName : string);
var
LWriter :TWriter;
MStm : TMemoryStream;
i:integer;
bCheck : boolean;
begin
MStm := TMemoryStream.Create;
LWriter :=TWriter.Create(MStm,csBuffer);
try
LWriter.WriteString(csFileFlag);
//文件头标志,随便写
LWriter.WriteInteger(Grid1.RowCount);
with Grid1do
begin
for i := 1 to Grid1.RowCount-1do
begin
GetCheckBoxState(csCheck,i,bCheck);
Lwriter.WriteBoolean(bCheck);
Lwriter.WriteString(Cells[csDate,i]);
Lwriter.WriteString(Cells[csTime,i]);
Lwriter.WriteString(Cells[csType,i]);
Lwriter.WriteString(Cells[csNeiRong,i]);
Lwriter.WriteString(Cells[csPrg,i]);
Lwriter.WriteString(Cells[csBell,i]);
Lwriter.WriteString(Cells[csHide,i]);
Lwriter.WriteString(Cells[csHidePass,i]);
end;
end;
Lwriter.FlushBuffer;
MStm.Seek(0,0);
MStm.SaveToFile(FileName);
finally
FreeAndNil(LWriter);
FreeAndNil(MStm);
end;
//
end;
 
多人接受答案了。
 
我以为是明白了,给大家散了分,可是没有找到相关的书籍,请楼上说详细,自己建立的文件用什么办法读写?
 
顶部