免费Pascal - 写入文件并将图像附加到它

时间:2014-08-13 12:53:51

标签: delphi-2010 freepascal lazarus

我有一个注册申请,它使用

将客户信息保存在一个文件中,该文件是每个客户的文件
Write(myFile, customer);
CloseFile(myFile);
FileMode := fmOpenReadWrite;

但是我需要附上客户的图片[jpg]并将其放入文件中,有没有人知道我该怎么做?

这是一个完整的List os记录

type
   TCustomer = Record

     NomeCompleto : string[100];
     Nome : string[20];
     Sobrenome : string[20];
     Idade  : string[20];
     Sexo : string[20];
     Escolaridade:string[60];
     CPF: string[11];
     RG:string[20];
     EstadoCivil:string[20];
     Filhos: boolean;
     QTFilhos: string[10];
     Foto:string[255];
     Endereco:string[40];
     Numero: string[20];
     Bairro: string[20];
     Cidade:string[20];
     Estado:string[2];
     Telefone:string[10];
     Celular:string[10];
     Email:string[40];
     Adicionais: string[200];
     Objetivo: string[200];

     Experiencia1: string[45];
     Entrada1: string[4];
     Saida1: string[4];
     Cargo1: string[35];
     resumo1: string[200];

     Experiencia2: string[45];
     Entrada2: string[4];
     Saida2: string[4];
     Cargo2: string[35];
     resumo2: string[200];

     Experiencia3: string[45];
     Entrada3: string[4];
     Saida3: string[4];
     Cargo3: string[35];
     resumo3: string[200];

     Experiencia4: string[45];
     Entrada4: string[4];
     Saida4: string[4];
     Cargo4: string[35];
     resumo4: string[200];

   Instituicao1:string[45];
   Nomecurso1:string[45];
   datainicial1:string[45];
   datafinal1:string[45];

   Instituicao2:string[45];
   Nomecurso2:string[45];
   datainicial2:string[45];
   datafinal2:string[45];

   Instituicao3:string[45];
   Nomecurso3:string[45];
   datainicial3:string[45];
   datafinal3:string[45];

   Instituicao4:string[45];
   Nomecurso4:string[45];
   datainicial4:string[45];
   datafinal4:string[45];

   Instituicao5:string[45];
   Nomecurso5:string[45];
   datainicial5:string[45];
   datafinal5:string[45];

   Instituicao6:string[45];
   Nomecurso6:string[45];
   datainicial6:string[45];
   datafinal6:string[45];

   instituicao:string[45];
   area:string[45];
   ano:string[10];

   carga1:string[10];
   carga2:string[10];
   carga3:string[10];
   carga4:string[10];
   carga5:string[10];
   carga6:string[10];

   personalidade:string[255];

2 个答案:

答案 0 :(得分:1)

停止使用旧式Pascal文件I / O并包含文件流。将文件写为二进制文件,而不是文本文件。然后,您至少可以执行以下操作。

创建文件:

var
  customer: TCustomer;
  jpg: TJPEGImage;
  myFile: TFileStream;
begin
  jpg := TJPEGImage.Create;
  try
    // fill customer and jpg as needed...
    myFile := TFileStream.Create(Filename, fmCreate);
    try
      myFile.WriteBuffer(customer, sizeof(customer));
      jpg.SaveToStream(myFile);
    finally
      myFile.Free;
    end;
  finally
    jpg.Free;
  end;
end;

加载文件:

var
  customer: TCustomer;
  jpg: TJPEGImage;
  myFile: TFileStream;
begin
  jpg := TJPEGImage.Create;
  try
    myFile := TFileStream.Create(Filename, fmOpenRead);
    try
      myFile.ReadBuffer(customer, sizeof(customer));
      jpg.LoadFromStream(myFile);
    finally
      myFile.Free;
    end;
    // use customer and jpg as needed...
  finally
    jpg.Free;
  end;
end;

答案 1 :(得分:0)

鉴于您的customer记录包含固定大小的项目,我建议您定义以下内容:

photo : byte[20000];

然后,您可以将JPG文件作为file of byte打开,读取所有内容,并将其存储在记录中的photo数组中。

当然,这有一个缺点,你必须预先决定最大图像尺寸,但对于一张小脸照片,20-50kB应该绰绰有余。

也可以将文件重新打开为byte类型的文件,并简单地将二进制图像数据附加到末尾(即,以byte数组或序列的形式读取图像数据如果您的customer记录(现在是)具有固定大小,则为字节数,并将其复制/附加到客户数据文件中。通过这种方式,您可以了解“平衡”。您的数据文件是纯图像数据。