文件的格式暂定是jpg。
我想过将多个文件分别读入流,然后加分隔符号,再合并所有流,最后写入字段。读出后根据分隔符号分离就行了。但是这样的分割符号应该如何定义比较好呢?—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

解决方案 »

  1.   

    弄个格式就行了。如下:
    type
      TData = record
        FileName: array [0..50] of Char;
        FileSize: Integer;
        FileData: PChar;
      end;
    然后以文件流或内存流的形式将一个个文件写到一个TStream对象里面,然后数据对TBlobField(Field).LoadFromStream(...)进行导入。导出时按上面的格式进行分隔。
      

  2.   

    procedure WriteFileToStream(AStream: TStream; AFileList: TStrings);
    var
      S: string;
      I, Size: Integer;
      Stream: TMemoryStream;
    begin
      AStream.Size := 0; //clear
      Stream := TMemoryStream.Create;
      for I := 0 to AFileList.Count - 1 do
      begin
        S := AFileList[I];
        Stream.LoadFromFile(S);
        S := ExtractFileName(S);
        AStream.WriteBuffer(S[1], Length(S));
        Size := Stream.Size;
        AStream.WriteBuffer(Size, SizeOf(Size));
        AStream.WriteBuffer(Stream.Memory^, Size);
      end;
    end;begin
      list.Add('c:\a.file');
      list.Add('d:\b.file');
      WriteFileToStream(Stream, List);
      TBlobField(Table1.FieldByName('filefield')).LoadFromFile(Stream);  
    end;像这样
    读的时候就是先读50个字符,它为FileName,再读4字节的FileSize,然后再读FileSize个字节的FileData,然后Loop,就可以读出全部的内容了.
      

  3.   

    copy_paste(木石三) 的想法非常好。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  4.   

    有点错,
    S := ExtractFileName(S);
    AStream.WriteBuffer(S[1], Length(S));写进去的时候要指定这个Size,而不是它的Length,因为读的时候是无法确定它的Length的,所以:
    S := ExtractFileName(S);
    AStream.WriteBuffer(S[1], 50);即只写50个字符作为文件名的长度,超过则截掉。
    这样读的时候即使后面没有,也不会影响FileSize, FileData的数据。不然读的数据肯定是有错的。