我想自定义文件格式保存文件,其中包括文本和图片同时保存。想用流的形式实现读写,朋友说自定义结构,在文件结尾加tag,读的时候根据tag判断图片还是文字。不知道哪位有例子的?
以前都是用数据库来做的,发现有很多软件就将数据直接保存为一个文件,不知道该怎么做?

解决方案 »

  1.   

    关键是我要知道怎么读写,怎么定义结构
    如过你不会用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;
      

  2.   

    filesteam我会,只是文件结构不知道如何定义,朋友说定义xml结构的