如何自定义文件格式保存文件? 我想自定义文件格式保存文件,其中包括文本和图片同时保存。想用流的形式实现读写,朋友说自定义结构,在文件结尾加tag,读的时候根据tag判断图片还是文字。不知道哪位有例子的?以前都是用数据库来做的,发现有很多软件就将数据直接保存为一个文件,不知道该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关键是我要知道怎么读写,怎么定义结构如过你不会用FileStream,先学会。以下是我写的一段程序,没有图片,不过道理是一样的procedure SaveRemindInfo;var FileStream: TFileStream;begin FileStream := TFileStream.Create(AppPath + 'Reminds.dat',fmCreate); try SaveToStream(FileStream); finally FileStream.Free; end;end;procedure SaveToStream(FileStream: TFileStream);var i,StrLen:Integer; Buffer: array of Char; SegmentFlag: Byte;begin SegmentFlag := SegmentFlagValue; // 写入保留部分 SetLength(Buffer, ReservedSpace * SizeOf(Integer)); Move(SBBZInfo[1], Buffer[0], Length(SBBZInfo)); FileStream.Write(Buffer[0], ReservedSpace * SizeOf(Integer)); FileStream.Write(SegmentFlag, SizeOf(SegmentFlag)); // 段落标志 Finalize(Buffer); //写入数据 With ClockInfo do begin FileStream.Write(RemindCount,SizeOf(Integer)); for i := 0 to RemindCount - 1 do begin FileStream.Write(Reminds[i].Active,SizeOf(Boolean)); FileStream.Write(Reminds[i].RemindRule,Sizeof(TRemindRule)); FileStream.Write(Reminds[i].Date,Sizeof(TDate)); FileStream.Write(Reminds[i].WeekDay,SizeOf(Integer)); FileStream.Write(Reminds[i].Time,Sizeof(TTime)); FileStream.Write(Reminds[i].Needconfirm,SizeOf(Boolean)); FileStream.Write(Reminds[i].Task, SizeOf(TTask)); FileStream.Write(Reminds[i].EndDate, SizeOf(TDate)); StrLen := Length(Reminds[i].RemindText); FileStream.Write(StrLen,SizeOf(Integer)); FileStream.Write(Reminds[i].RemindText[1],StrLen); StrLen := Length(Reminds[i].SoundFile); FileStream.Write(StrLen,SizeOf(Integer)); FileStream.Write(Reminds[i].SoundFile[1],StrLen); StrLen := Length(Reminds[i].Execute); FileStream.Write(StrLen,SizeOf(Integer)); FileStream.Write(Reminds[i].Execute[1],StrLen); FileStream.Write(SegmentFlag, SizeOf(SegmentFlag)); // 段落标志 end; end;end; filesteam我会,只是文件结构不知道如何定义,朋友说定义xml结构的 XE2 还没出来吗? 调用dll中的窗口问题(急) ◎◎◎关于DBGrid的显示问题◎◎◎ STrings问题 超级难题,重量级犒赏 delphi+ado远程连接sql server 2000服务器的问题,在线等待 怎么得到鼠标的第三键的滑动事件? delphi idhttp 向asp 或PHP提交参数的问题 屏幕绘图源程序 Acrobat Reader 5.0中文版在看书时会出现“字体'HYclgj'包含错误/外框”错误框!? tthread类的create 与thread对象的create 有什么区别? 100分!! 简单问题。汉字转化成字符
如过你不会用FileStream,先学会。
以下是我写的一段程序,没有图片,不过道理是一样的procedure SaveRemindInfo;
var
FileStream: TFileStream;
begin
FileStream := TFileStream.Create(AppPath + 'Reminds.dat',fmCreate);
try
SaveToStream(FileStream);
finally
FileStream.Free;
end;
end;
procedure SaveToStream(FileStream: TFileStream);
var
i,StrLen:Integer;
Buffer: array of Char;
SegmentFlag: Byte;
begin
SegmentFlag := SegmentFlagValue;
// 写入保留部分
SetLength(Buffer, ReservedSpace * SizeOf(Integer));
Move(SBBZInfo[1], Buffer[0], Length(SBBZInfo));
FileStream.Write(Buffer[0], ReservedSpace * SizeOf(Integer));
FileStream.Write(SegmentFlag, SizeOf(SegmentFlag)); // 段落标志
Finalize(Buffer);
//写入数据
With ClockInfo do
begin
FileStream.Write(RemindCount,SizeOf(Integer));
for i := 0 to RemindCount - 1 do
begin
FileStream.Write(Reminds[i].Active,SizeOf(Boolean));
FileStream.Write(Reminds[i].RemindRule,Sizeof(TRemindRule));
FileStream.Write(Reminds[i].Date,Sizeof(TDate));
FileStream.Write(Reminds[i].WeekDay,SizeOf(Integer));
FileStream.Write(Reminds[i].Time,Sizeof(TTime));
FileStream.Write(Reminds[i].Needconfirm,SizeOf(Boolean));
FileStream.Write(Reminds[i].Task, SizeOf(TTask));
FileStream.Write(Reminds[i].EndDate, SizeOf(TDate));
StrLen := Length(Reminds[i].RemindText);
FileStream.Write(StrLen,SizeOf(Integer));
FileStream.Write(Reminds[i].RemindText[1],StrLen); StrLen := Length(Reminds[i].SoundFile);
FileStream.Write(StrLen,SizeOf(Integer));
FileStream.Write(Reminds[i].SoundFile[1],StrLen); StrLen := Length(Reminds[i].Execute);
FileStream.Write(StrLen,SizeOf(Integer));
FileStream.Write(Reminds[i].Execute[1],StrLen); FileStream.Write(SegmentFlag, SizeOf(SegmentFlag)); // 段落标志
end;
end;
end;